diff options
-rw-r--r-- | upb/def.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -1133,7 +1133,7 @@ static bool create_fielddef( upb_alloc *alloc = ctx->alloc; upb_fielddef *f; const google_protobuf_FieldOptions *options; - upb_stringview defaultval, name; + upb_stringview name; upb_value packed_v = pack_def(f, UPB_DEFTYPE_FIELD); upb_value v = upb_value_constptr(f); const char *full_name; @@ -1220,17 +1220,20 @@ static bool create_fielddef( f->oneof = NULL; } - defaultval = google_protobuf_FieldDescriptorProto_default_value(field_proto); - - if (defaultval.data) { + if (google_protobuf_FieldDescriptorProto_has_default_value(field_proto)) { + upb_stringview defaultval = + google_protobuf_FieldDescriptorProto_default_value(field_proto); CHK(parse_default(ctx, defaultval.data, defaultval.size, f)); } - options = google_protobuf_FieldDescriptorProto_options(field_proto); - if (options) { + if (google_protobuf_FieldDescriptorProto_has_options(field_proto)) { + options = google_protobuf_FieldDescriptorProto_options(field_proto); f->lazy_ = google_protobuf_FieldOptions_lazy(options); f->packed_ = google_protobuf_FieldOptions_packed(options); + } else { + f->lazy_ = false; + f->packed_ = false; } return true; |