From 372c8f0487a666c3fb36edc18accba0fba9a2680 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Sat, 24 Jul 2010 17:01:45 -0700 Subject: Fixes to benchmark. --- stream/upb_decoder.c | 12 +++++++++--- stream/upb_strstream.c | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'stream') diff --git a/stream/upb_decoder.c b/stream/upb_decoder.c index 74ef5c5..46cfb3f 100644 --- a/stream/upb_decoder.c +++ b/stream/upb_decoder.c @@ -318,7 +318,9 @@ upb_fielddef *upb_decoder_getdef(upb_decoder *d) } // Handles the packed field case. - if(d->field) return d->field; + if(d->field) { + return d->field; + } uint32_t key = 0; again: @@ -457,12 +459,15 @@ bool upb_decoder_startmsg(upb_decoder *d) { return false; } upb_decoder_frame *frame = d->top; - frame->msgdef = upb_downcast_msgdef(d->field->def); if(d->field->type == UPB_TYPE(GROUP)) { frame->end_offset = UPB_GROUP_END_OFFSET; - } else { + } else if (d->field->type == UPB_TYPE(MESSAGE)) { frame->end_offset = upb_decoder_offset(d) + d->delimited_len; + } else { + upb_seterr(&d->src.status, UPB_STATUS_ERROR, + "Tried to startmsg a non-msg field."); } + frame->msgdef = upb_downcast_msgdef(d->field->def); d->field = NULL; return true; } @@ -485,6 +490,7 @@ bool upb_decoder_endmsg(upb_decoder *d) { bool upb_decoder_skipval(upb_decoder *d) { upb_strlen_t bytes_to_skip; + d->field = NULL; switch(d->wire_type) { case UPB_WIRE_TYPE_VARINT: { return upb_decoder_skipv64(d); diff --git a/stream/upb_strstream.c b/stream/upb_strstream.c index 65f33d9..7ed761b 100644 --- a/stream/upb_strstream.c +++ b/stream/upb_strstream.c @@ -53,6 +53,7 @@ static upb_bytesrc_vtable upb_stringsrc_vtbl = { upb_stringsrc *upb_stringsrc_new() { upb_stringsrc *s = malloc(sizeof(*s)); + s->str = NULL; upb_bytesrc_init(&s->bytesrc, &upb_stringsrc_vtbl); return s; } -- cgit v1.2.3