THRIFT-3935 Incorrect skipping of map and set
Client: c_glib
Patch: Matej Kupljen <matej@cloudmondo.com>
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..8a560a9 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 @@
         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 @@
         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;