[
https://issues.apache.org/jira/browse/THRIFT-3935?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer resolved THRIFT-3935.
--------------------------------
Resolution: Fixed
Fix Version/s: 0.10.0
Committed, thank you.
> Incorrect skipping of map and set
> ---------------------------------
>
> Key: THRIFT-3935
> URL: https://issues.apache.org/jira/browse/THRIFT-3935
> Project: Thrift
> Issue Type: Bug
> Components: C glib - Library
> Affects Versions: 1.0
> Environment: Ubuntu
> Reporter: Matej Kupljen
> Assignee: Matej Kupljen
> Fix For: 0.10.0
>
> Attachments: add-set-and-fix-map-skip.patch
>
>
> If a new map<> is added to the thrift structure and sending this new
> serialized thrift to the old version that didn't included yet this map
> definition it should skip it. It does so, but it uses read_set_begin/end
> instead of read_map_begin/end functions.
> Included patch fixes the problem.
> Thanks,
> Matej
> {code}
> diff --git a/lib/c_glib/src/thrift/c_glib/protocol/thrift_protocol.c
> b/lib/c_glib/src/thrift/c_glib/protocol/thrift_protocol.c
> index d6315d8..b274b00 100644
> --- a/lib/c_glib/src/thrift/c_glib/protocol/thrift_protocol.c
> +++ b/lib/c_glib/src/thrift/c_glib/protocol/thrift_protocol.c
> @@ -489,14 +489,16 @@ thrift_protocol_skip (ThriftProtocol *protocol,
> ThriftType type, GError **error)
> {
> guint32 result = 0;
> ThriftType elem_type;
> + ThriftType key_type;
> guint32 i, size;
> - result += thrift_protocol_read_set_begin (protocol, &elem_type,
> &size,
> + result += thrift_protocol_read_map_begin (protocol, &key_type,
> &elem_type, &size,
> error);
> for (i = 0; i < size; i++)
> {
> + result += thrift_protocol_skip (protocol, key_type, error);
> result += thrift_protocol_skip (protocol, elem_type, error);
> }
> - result += thrift_protocol_read_set_end (protocol, error);
> + result += thrift_protocol_read_map_end (protocol, error);
> return result;
> }
> case T_LIST:
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)