diff options
-rw-r--r-- | pb.h | 4 | ||||
-rw-r--r-- | pb_decode.c | 3 | ||||
-rw-r--r-- | tests/extensions/decode_extensions.c | 2 | ||||
-rw-r--r-- | tests/splint/splint.rc | 1 |
4 files changed, 8 insertions, 2 deletions
@@ -341,6 +341,10 @@ struct _pb_extension_t { * If this extension does not match a field, the next handler is * automatically called. */ pb_extension_t *next; + + /* The decoder sets this to true if the extension was found. + * Ignored for encoding. */ + bool found; }; /* Memory allocation functions to use. You can define pb_realloc and diff --git a/pb_decode.c b/pb_decode.c index d8ac9ee2..9a48c60f 100644 --- a/pb_decode.c +++ b/pb_decode.c @@ -670,7 +670,6 @@ static bool checkreturn default_extension_decoder(pb_istream_t *stream, { const pb_field_t *field = (const pb_field_t*)extension->type->arg; pb_field_iterator_t iter; - bool dummy; if (field->tag != tag) return true; @@ -681,7 +680,7 @@ static bool checkreturn default_extension_decoder(pb_istream_t *stream, iter.required_field_index = 0; iter.dest_struct = extension->dest; iter.pData = extension->dest; - iter.pSize = &dummy; + iter.pSize = &extension->found; return decode_field(stream, wire_type, &iter); } diff --git a/tests/extensions/decode_extensions.c b/tests/extensions/decode_extensions.c index f8ebbde0..e4374380 100644 --- a/tests/extensions/decode_extensions.c +++ b/tests/extensions/decode_extensions.c @@ -49,7 +49,9 @@ int main(int argc, char **argv) } /* Check that the extensions decoded properly */ + TEST(ext1.found) TEST(extensionfield1 == 12345) + TEST(ext2.found) TEST(strcmp(extensionfield2.test1, "test") == 0) TEST(extensionfield2.test2 == 54321) diff --git a/tests/splint/splint.rc b/tests/splint/splint.rc index c77e210f..421f5677 100644 --- a/tests/splint/splint.rc +++ b/tests/splint/splint.rc @@ -27,6 +27,7 @@ -dependenttrans -kepttrans -branchstate +-immediatetrans # These tests give false positives, compiler typically has # better warnings for these. |