Only perform multiple oneof check for non-null fields.

This allows payloads like:
  {"oneofUint32": null, "oneofString": "test"}
pull/13171/head
Joshua Haberman 4 years ago
parent 42bdfcb849
commit a778f2639a
  1. 10
      upb/json_decode.c

@ -939,17 +939,17 @@ static void jsondec_field(jsondec *d, upb_msg *msg, const upb_msgdef *m) {
return;
}
if (upb_fielddef_realcontainingoneof(f) &&
upb_msg_whichoneof(msg, upb_fielddef_containingoneof(f))) {
jsondec_err(d, "More than one field for this oneof.");
}
if (jsondec_peek(d) == JD_NULL && !jsondec_isvalue(f)) {
/* JSON "null" indicates a default value, so no need to set anything. */
jsondec_null(d);
return;
}
if (upb_fielddef_realcontainingoneof(f) &&
upb_msg_whichoneof(msg, upb_fielddef_containingoneof(f))) {
jsondec_err(d, "More than one field for this oneof.");
}
preserved = d->debug_field;
d->debug_field = f;

Loading…
Cancel
Save