From f7c8dd81d48693dad0274becdbf328542271774b Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Tue, 20 Dec 2011 03:38:48 +0000 Subject: [PATCH] Make field decoders return false for unsupported pointer fields. git-svn-id: https://svn.kapsi.fi/jpa/nanopb-dev@1082 e3a754e5-d11d-0410-8d38-ebb782a927b9 --- pb_decode.c | 18 ++++++++++++------ tests/decode_unittests.c | 8 ++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/pb_decode.c b/pb_decode.c index 232c7b0..8931887 100644 --- a/pb_decode.c +++ b/pb_decode.c @@ -590,9 +590,9 @@ bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, voi if (x->size > field->data_size) return false; -#ifdef MALLOC_HEADER if (PB_POINTER(field->type)) { +#ifdef MALLOC_HEADER pb_bytes_t *x2 = (pb_bytes_t*)dest; if (x2->alloced < x2->size) @@ -605,8 +605,10 @@ bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, voi } return pb_read(stream, x2->bytes, x2->size); - } +#else + return false; #endif + } return pb_read(stream, x->bytes, x->size); } @@ -621,17 +623,19 @@ bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, vo if (size > field->data_size - 1) return false; -#ifdef MALLOC_HEADER if (PB_POINTER(field->type)) { +#ifdef MALLOC_HEADER uint8_t *string = (uint8_t*)realloc(*(uint8_t**)dest, size + 1); if (!string) return false; *(uint8_t**)dest = string; dest = string; - } +#else + return false; #endif + } status = pb_read(stream, (uint8_t*)dest, size); *((uint8_t*)dest + size) = 0; @@ -652,9 +656,9 @@ bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field msg = (const pb_message_t*)field->ptr; -#ifdef MALLOC_HEADER if (PB_POINTER(field->type)) { +#ifdef MALLOC_HEADER if (*(void**)dest == NULL) { void *object = malloc(msg->size); @@ -665,8 +669,10 @@ bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field } else { dest = *(void**)dest; } - } +#else + return false; #endif + } status = pb_decode(&substream, msg, dest); stream->state = substream.state; diff --git a/tests/decode_unittests.c b/tests/decode_unittests.c index b227fdc..352146c 100644 --- a/tests/decode_unittests.c +++ b/tests/decode_unittests.c @@ -279,7 +279,6 @@ int main() TEST((s = S("\x08"), !pb_decode(&s, IntegerArray_msg, &dest))) } -#ifdef MALLOC_HEADER { pb_istream_t s; PointerContainer dest; @@ -287,6 +286,7 @@ int main() COMMENT("Testing pb_decode with pointer fields") memset(&dest, 0, sizeof(dest)); +#ifdef MALLOC_HEADER TEST((s = S("\x0A\x01\x61\x12\x01\x62\x2A\x01\x65\x32\x01\x66\x3A\x00" "\x42\x01\x63\x4A\x01\x64"), pb_decode(&s, PointerContainer_msg, &dest))) @@ -300,8 +300,12 @@ int main() TEST(0 == strcmp(dest.otext, "c")) TEST(dest.oblob.size == 1 && dest.oblob.bytes[0] == 'd') TEST(pb_clean(PointerContainer_msg, &dest)); - } +#else + TEST((s = S("\x0A\x01\x61\x12\x01\x62\x2A\x01\x65\x32\x01\x66\x3A\x00" + "\x42\x01\x63\x4A\x01\x64"), + !pb_decode(&s, PointerContainer_msg, &dest))) #endif + } if (status != 0) fprintf(stdout, "\n\nSome tests FAILED!\n");