summaryrefslogtreecommitdiffstats
path: root/pb_decode.c
diff options
context:
space:
mode:
Diffstat (limited to 'pb_decode.c')
-rw-r--r--pb_decode.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/pb_decode.c b/pb_decode.c
index d1efd1b5..26d7c2b7 100644
--- a/pb_decode.c
+++ b/pb_decode.c
@@ -650,6 +650,14 @@ static bool checkreturn default_extension_decoder(pb_istream_t *stream,
iter.pData = extension->dest;
iter.pSize = &extension->found;
+ if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
+ {
+ /* For pointer extensions, the pointer is stored directly
+ * in the extension structure. This avoids having an extra
+ * indirection. */
+ iter.pData = &extension->dest;
+ }
+
return decode_field(stream, wire_type, &iter);
}