Check for empty message type before incrementing required_field_index.
authorKent Ryhorchuk <kryhorchuk@xeralux.com>
Tue, 16 Jul 2013 01:04:47 +0000 (18:04 -0700)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Tue, 16 Jul 2013 08:07:48 +0000 (11:07 +0300)
If you have a message that defined as empty, but attempt to decode a
message that has one or more unknown fields then pb_decode fails. The
method used to count the number of required fields counts 1 required
field because the default type of PB_LAST_FIELD is PB_HTYPE_REQUIRED.

pb_decode.c

index c533698..a079556 100644 (file)
@@ -308,12 +308,12 @@ static bool pb_field_next(pb_field_iterator_t *iter)
         prev_size *= iter->pos->array_size;
     }
     
-    if (PB_HTYPE(iter->pos->type) == PB_HTYPE_REQUIRED)
-        iter->required_field_index++;
-    
     if (iter->pos->tag == 0)
         return false; /* Only happens with empty message types */
     
+    if (PB_HTYPE(iter->pos->type) == PB_HTYPE_REQUIRED)
+        iter->required_field_index++;
+    
     iter->pos++;
     iter->field_index++;
     if (iter->pos->tag == 0)