You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Craig W (JIRA)" <ji...@apache.org> on 2018/10/12 13:59:01 UTC
[jira] [Updated] (THRIFT-4650) Required field incorrectly marked as
set when fieldType does not match
[ https://issues.apache.org/jira/browse/THRIFT-4650?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Craig W updated THRIFT-4650:
----------------------------
Description:
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.}}
{{ }}
was:
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.}}
{{ }}
> 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
> Priority: Major
>
> 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)