summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@npb.mail.kapsi.fi>2011-08-23 15:57:47 +0000
committerPetteri Aimonen <jpa@npb.mail.kapsi.fi>2011-08-23 15:57:47 +0000
commit9966a8c9b680ada47b6bd5fe96405c0abaf773e4 (patch)
tree27cb83a34cc722c1414dc531c36b4104b601aa63
parent7780da38e88027370009afda5a9b6dc93a4168d4 (diff)
more unittests
git-svn-id: https://svn.kapsi.fi/jpa/nanopb@964 e3a754e5-d11d-0410-8d38-ebb782a927b9
-rw-r--r--pb_decode.c9
-rw-r--r--tests/decode_unittests.c12
2 files changed, 15 insertions, 6 deletions
diff --git a/pb_decode.c b/pb_decode.c
index 0e55cbfb..6c6b1d9e 100644
--- a/pb_decode.c
+++ b/pb_decode.c
@@ -337,17 +337,14 @@ bool checkreturn pb_decode(pb_istream_t *stream, const pb_field_t fields[], void
pb_field_iterator_t iter;
int i;
- if (fields[0].tag == 0)
- {
- /* No fields -> nothing to do */
- return pb_read(stream, NULL, stream->bytes_left);
- }
-
pb_field_init(&iter, fields, dest_struct);
/* Initialize size/has fields and apply default values */
do
{
+ if (iter.current->tag == 0)
+ continue;
+
if (PB_HTYPE(iter.current->type) == PB_HTYPE_OPTIONAL)
{
*(bool*)iter.pSize = false;
diff --git a/tests/decode_unittests.c b/tests/decode_unittests.c
index 85dd8d58..6f2b77e5 100644
--- a/tests/decode_unittests.c
+++ b/tests/decode_unittests.c
@@ -282,6 +282,18 @@ int main()
TEST((s = S("\x08\x55"), !pb_decode(&s, CallbackArray_fields, &dest)))
}
+ {
+ pb_istream_t s;
+ IntegerArray dest;
+
+ COMMENT("Testing pb_decode message termination")
+ TEST((s = S(""), pb_decode(&s, IntegerArray_fields, &dest)))
+ TEST((s = S("\x00"), pb_decode(&s, IntegerArray_fields, &dest)))
+ TEST((s = S("\x08\x01"), pb_decode(&s, IntegerArray_fields, &dest)))
+ TEST((s = S("\x08\x01\x00"), pb_decode(&s, IntegerArray_fields, &dest)))
+ TEST((s = S("\x08"), !pb_decode(&s, IntegerArray_fields, &dest)))
+ }
+
if (status != 0)
fprintf(stdout, "\n\nSome tests FAILED!\n");