diff options
Diffstat (limited to 'upb/pb/decoder.c')
-rw-r--r-- | upb/pb/decoder.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/upb/pb/decoder.c b/upb/pb/decoder.c index 182ecc9..79142bf 100644 --- a/upb/pb/decoder.c +++ b/upb/pb/decoder.c @@ -543,6 +543,9 @@ UPB_NOINLINE int32_t upb_pbdecoder_checktag_slow(upb_pbdecoder *d, int32_t upb_pbdecoder_skipunknown(upb_pbdecoder *d, int32_t fieldnum, uint8_t wire_type) { + upb_addunknown_handlerfunc *addunknown; + const void* hd; + if (fieldnum >= 0) goto have_tag; @@ -596,6 +599,14 @@ have_tag: } if (d->top->groupnum >= 0) { + addunknown = (upb_addunknown_handlerfunc *)upb_handlers_gethandler( + (d->top->sink).handlers, UPB_UNKNOWN_SELECTOR); + if (addunknown != NULL) { + hd = upb_handlers_gethandlerdata((d->top->sink).handlers, + UPB_UNKNOWN_SELECTOR); + addunknown((d->top->sink).closure, hd, d->checkpoint, + d->ptr - d->checkpoint); + } return DECODE_OK; } |