summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatej Kupljen <matej@cloudmondo.com>2016-09-29 20:46:26 +0200
committerJens Geyer <jensg@apache.org>2016-09-29 20:46:26 +0200
commite349c345d3c3380657f7d0d388cda676f2014c3d (patch)
tree6db0586155c5e178b494a7ee1b243a7db5ecd798
parent8ccf5a645c8e34e0abb6f31b216dbf77f0ac2a43 (diff)
downloadthrift-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.c18
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;