Craig W created THRIFT-4650:
-------------------------------
Summary: Required field incorrectly marked as set when fieldType
does not match
Key: THRIFT-4650
URL: https://issues.apache.org/jira/browse/THRIFT-4650
Project: Thrift
Issue Type: Bug
Components: Go - Compiler
Affects Versions: 0.11.0
Reporter: Craig W
The "Read" function that gets generated incorrectly marks required fields as
being set when the type of the field does not match what's expected.
{{For example, the following IDL:}}
{{struct Foo {}}
{{ 1: required string id}}
{{}}}
{{The generated Read function has the following:}}
{{switch fieldId {}}
{{ case 1:}}
{{ if fieldTypeId == thrift.STRING {}}
{{ if err := p.ReadField1(iprot); err != nil {}}
{{ return err}}
{{ }}}
{{ } else {}}
{{ if err := iprot.Skip(fieldTypeId); err != nil {}}
{{ return err}}
{{ }}}
{{ }}}
{{ issetID = true}}
{{}}}
{{I ran into a case where I attempted to deserialize another message type into
type Foo, and I expected it to return an error, but it did not.}}
{{f : = Foo{}}}
{{err := thrift.NewTDeserializer().Read(&f, bytes)}}
{{I think [this
code|https://github.com/apache/thrift/blob/master/compiler/cpp/src/thrift/generate/t_go_generator.cc#L1600]
in the generator needs to be moved inside the first "if" block, so that its
only set to true if it actually reads the data of the correct type.}}
{{ }}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)