[ 
https://issues.apache.org/jira/browse/THRIFT-5791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17855058#comment-17855058
 ] 

Team_RPCtester edited comment on THRIFT-5791 at 6/14/24 1:46 PM:
-----------------------------------------------------------------

[~fishywang] Thank you for your response. Let me clarify our question. We use 
the Go, NodeJs and py3 as the client, and py3 as the server. The client(Go, 
NodeJs and py3) all sent the same instance (Struct_class_0\{f_1: 26570, 
f_2:"bJY", f_3:Union_0{uitem_2:"lZz"}}), but the server side receives different 
values. The default value of f_4 in StructClass_0 is 73.

Our test case reveals that when no value is provided on f_4, Go writes 0 on the 
wire, while Python 3 and Node.js write 73. (shown in the following figure). 

!image-2024-06-14-21-45-17-915.png!

According to the specification regarding default values, when no value is 
provided, the f_4 should be 73. So, we think Go violates the specification by 
setting f_4 to 0. Could you please double check if this behavior indicates a 
bug?(The attachment can also help you reproduce the bug.) Thanks.    


was (Author: JIRAUSER305549):
[~fishywang] Thank you for your response. Let me clarify our question. We use 
the Go, NodeJs and py3 as the client, and py3 as the server. The client(Go, 
NodeJs and py3) all sent the same instance (Struct_class_0\{f_1: 26570, 
f_2:"bJY", f_3:Union_0{uitem_2:"lZz"}}), but the server side receives different 
values. The default value of f_4 in StructClass_0 is 73.

Our test case reveals that when no value is provided on f_4, Go writes 0 on the 
wire, while Python 3 and Node.js write 73. (refer the fig as reference). 

!image-2024-06-14-21-45-17-915.png!

According to the specification regarding default values, when no value is 
provided, the f_4 should be 73. So, we think Go violates the specification by 
setting f_4 to 0. Could you please double check if this behavior indicates a 
bug?(The attachment can also help you reproduce the bug.) Thanks.    

> Inconsistent behavior: Go does not use default values
> -----------------------------------------------------
>
>                 Key: THRIFT-5791
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5791
>             Project: Thrift
>          Issue Type: Bug
>          Components: Go - Compiler, Go - Library
>    Affects Versions: 0.19.0, 0.20.0
>            Reporter: Team_RPCtester
>            Priority: Major
>         Attachments: image-2024-06-02-20-15-37-106.png, 
> image-2024-06-02-20-15-55-606.png, image-2024-06-02-20-16-08-144.png, 
> image-2024-06-14-21-43-51-655.png, image-2024-06-14-21-45-17-915.png, 
> temp_thrift.zip
>
>
> Hi,
> We are software engineering researchers working on automated program analysis 
> techniques to improve the reliability of RPC frameworks.
>  
> We discover a bug illustrated by the following example (The attached script 
> can help you reproduce the issue).
> When using a .thrift file to define a struct, if one of the fields is 
> optional and has a default i8 value (e.g., 73), there is an inconsistent 
> behavior in implementations across different languages. Specifically:
>  # In the Go implementation, if the field is not explicitly defined or 
> assigned a value, the transmitted value is 0.
>  # In the Python and Node.js implementations, if the field is not explicitly 
> defined or assigned a value, the transmitted value is the default value of 73.
> This inconsistency indicates that there might be an issue with the Go 
> implementation.
> In our setting, we use Go, Node.js, and Python 3 as the server side, and use 
> Go, Node.js, and Python 3, as the client side. The thrift file we use is 
> shown in the flowing picture:
> !image-2024-06-02-20-15-37-106.png!
> When calling Method_3, the message passed is an instance of StructClass_0, 
> where f_4 is not set. The f_4 is automatically defined as 0, while in Python 
> 3 and Node.js, f_4 is 73.
> The result is shown as bellow:
> !image-2024-06-02-20-15-55-606.png!
> go-py3_json_buffered-ip_client.log
> !image-2024-06-02-20-16-08-144.png!
> go-go_json_buffered-ip_client.log
> The attachments provided are essential for reproducing the issue. By 
> following the commands outlined in the accompanying readme.md, you will be 
> able to replicate the problem accurately.
>  
> *This is our first submission. If you have any preferred methods, please feel 
> free to let us know. Thank you.*



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to