summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2010-07-24 17:01:45 -0700
committerJoshua Haberman <joshua@reverberate.org>2010-07-24 17:01:45 -0700
commit372c8f0487a666c3fb36edc18accba0fba9a2680 (patch)
tree1265fee2c2324a5bca84208fdf29caa3a8697818
parent851c6a6915b55842809c8622d0fb941bc911be37 (diff)
Fixes to benchmark.
-rw-r--r--benchmarks/parsestream.upb_table.c8
-rw-r--r--core/upb_def.c2
-rw-r--r--stream/upb_decoder.c12
-rw-r--r--stream/upb_strstream.c1
4 files changed, 18 insertions, 5 deletions
diff --git a/benchmarks/parsestream.upb_table.c b/benchmarks/parsestream.upb_table.c
index c6acad9..1e18119 100644
--- a/benchmarks/parsestream.upb_table.c
+++ b/benchmarks/parsestream.upb_table.c
@@ -17,6 +17,12 @@ static bool initialize()
upb_status status = UPB_STATUS_INIT;
upb_symtab *s = upb_symtab_new();
upb_symtab_add_descriptorproto(s);
+ upb_def *fds_def = upb_symtab_lookup(
+ s, UPB_STRLIT("google.protobuf.FileDescriptorSet"));
+ if (!fds_def) {
+ fprintf(stderr, "Couldn't load FileDescriptorSet def");
+ }
+
upb_string *fds_str = upb_strreadfile(MESSAGE_DESCRIPTOR_FILE);
if(fds_str == NULL) {
fprintf(stderr, "Couldn't read " MESSAGE_DESCRIPTOR_FILE ":"),
@@ -26,8 +32,6 @@ static bool initialize()
upb_stringsrc *ssrc = upb_stringsrc_new();
upb_stringsrc_reset(ssrc, fds_str);
- upb_def *fds_def = upb_symtab_lookup(
- s, UPB_STRLIT("google.protobuf.FileDescriptorSet"));
upb_decoder *d = upb_decoder_new(upb_downcast_msgdef(fds_def));
upb_decoder_reset(d, upb_stringsrc_bytesrc(ssrc));
diff --git a/core/upb_def.c b/core/upb_def.c
index e40e1f0..e117455 100644
--- a/core/upb_def.c
+++ b/core/upb_def.c
@@ -384,6 +384,8 @@ static bool upb_addfield(upb_src *src, upb_msgdef *m, upb_status *status)
f->owned = true;
break;
}
+ default:
+ upb_src_skipval(src);
}
}
CHECKSRC(upb_src_eof(src));
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;
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback