diff options
author | Matej Kupljen <matej@cloudmondo.com> | 2016-09-29 20:46:26 +0200 |
---|---|---|
committer | Jens Geyer <jensg@apache.org> | 2016-09-29 20:46:26 +0200 |
commit | e349c345d3c3380657f7d0d388cda676f2014c3d (patch) | |
tree | 6db0586155c5e178b494a7ee1b243a7db5ecd798 | |
parent | 8ccf5a645c8e34e0abb6f31b216dbf77f0ac2a43 (diff) | |
download | thrift-e349c345d3c3380657f7d0d388cda676f2014c3d.tar.gz |
THRIFT-3935 Incorrect skipping of map and set
Client: c_glib
Patch: Matej Kupljen <matej@cloudmondo.com>
-rw-r--r-- | lib/c_glib/src/thrift/c_glib/protocol/thrift_protocol.c | 18 |
1 files changed, 17 insertions, 1 deletions
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 d6315d8fb..8a560a9f2 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 @@ -485,7 +485,7 @@ thrift_protocol_skip (ThriftProtocol *protocol, ThriftType type, GError **error) result += thrift_protocol_read_struct_end (protocol, error); return result; } - case T_MAP: + case T_SET: { guint32 result = 0; ThriftType elem_type; @@ -499,6 +499,22 @@ thrift_protocol_skip (ThriftProtocol *protocol, ThriftType type, GError **error) result += thrift_protocol_read_set_end (protocol, error); return result; } + case T_MAP: + { + guint32 result = 0; + ThriftType elem_type; + ThriftType key_type; + guint32 i, 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_map_end (protocol, error); + return result; + } case T_LIST: { guint32 result = 0; |