Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nanopb/nanopb.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2017-06-15 07:54:05 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2017-06-15 07:54:05 +0300
commite2a1bdb086038f17aaeb36e7f8e4afa682f49c8e (patch)
tree3ed3f82fabed33adb361ae5e24cc27f817e615b0 /pb_decode.c
parent182345edf541d0058984894c003c3b689e679582 (diff)
Fix segfault when decoding FT_CALLBACK field inside FT_POINTER (issue #259)
Similar memset() already existed for oneofs.
Diffstat (limited to 'pb_decode.c')
-rw-r--r--pb_decode.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/pb_decode.c b/pb_decode.c
index 06d766a..b4563cf 100644
--- a/pb_decode.c
+++ b/pb_decode.c
@@ -478,6 +478,9 @@ static void initialize_pointer_field(void *pItem, pb_field_iter_t *iter)
}
else if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE)
{
+ /* We memset to zero so that any callbacks are set to NULL.
+ * Then set any default values. */
+ memset(pItem, 0, iter->pos->data_size);
pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, pItem);
}
}
@@ -616,7 +619,7 @@ static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type
void **arg = &(pCallback->arg);
#endif
- if (pCallback->funcs.decode == NULL)
+ if (pCallback == NULL || pCallback->funcs.decode == NULL)
return pb_skip_field(stream, wire_type);
if (wire_type == PB_WT_STRING)