diff options
Diffstat (limited to 'tests/mem_release/mem_release.c')
-rw-r--r-- | tests/mem_release/mem_release.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/tests/mem_release/mem_release.c b/tests/mem_release/mem_release.c index dc6f87d..6e06da5 100644 --- a/tests/mem_release/mem_release.c +++ b/tests/mem_release/mem_release.c @@ -177,9 +177,43 @@ static bool test_OneofMessage() return true; } +static bool dummy_decode_cb(pb_istream_t *stream, const pb_field_t *field, void **arg) +{ + return false; +} + +/* Garbage input */ +static bool test_Garbage() +{ + const uint8_t buffer[] = "I'm only happy when it rains"; + const size_t msgsize = sizeof(buffer); + + { + OneofMessage msg = OneofMessage_init_zero; + pb_istream_t stream = pb_istream_from_buffer(buffer, msgsize); + TEST(!pb_decode(&stream, OneofMessage_fields, &msg)); + } + + { + TestMessage msg = TestMessage_init_zero; + pb_istream_t stream = pb_istream_from_buffer(buffer, msgsize); + TEST(!pb_decode(&stream, TestMessage_fields, &msg)); + } + + { + RepeatedMessage msg = RepeatedMessage_init_zero; + pb_istream_t stream = pb_istream_from_buffer(buffer, msgsize); + msg.subs.arg = NULL; + msg.subs.funcs.decode = dummy_decode_cb; + TEST(!pb_decode(&stream, RepeatedMessage_fields, &msg)); + } + + return true; +} + int main() { - if (test_TestMessage() && test_OneofMessage()) + if (test_TestMessage() && test_OneofMessage() && test_Garbage()) return 0; else return 1; |