summaryrefslogtreecommitdiff
path: root/upb/json/parser.c
diff options
context:
space:
mode:
authorJosh Haberman <jhaberman@gmail.com>2016-04-14 10:40:11 -0700
committerJosh Haberman <jhaberman@gmail.com>2016-04-14 10:40:11 -0700
commit1019f76fc550bebafed0cfb65e6a04b9ff945185 (patch)
tree62c1296e4ada96dcf3e8f3091727fc92ed704555 /upb/json/parser.c
parent458077ccb4f7eddc94549528c3a9809745982352 (diff)
Added migration flag for users using old JSON format.
Diffstat (limited to 'upb/json/parser.c')
-rw-r--r--upb/json/parser.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/upb/json/parser.c b/upb/json/parser.c
index 3731478..e1a334d 100644
--- a/upb/json/parser.c
+++ b/upb/json/parser.c
@@ -1627,14 +1627,24 @@ static void add_jsonname_table(upb_json_parsermethod *m, const upb_msgdef* md) {
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
const upb_fielddef *f = upb_msg_iter_field(&i);
+
size_t field_len = upb_fielddef_getjsonname(f, buf, len);
if (field_len > len) {
+ size_t len2;
buf = realloc(buf, field_len);
len = field_len;
- upb_fielddef_getjsonname(f, buf, len);
+ len2 = upb_fielddef_getjsonname(f, buf, len);
+ UPB_ASSERT_VAR(len2, len == len2);
}
upb_strtable_insert(t, buf, upb_value_constptr(f));
+ if (getenv("UPB_JSON_ACCEPT_LEGACY_FIELD_NAMES")) {
+ /* Temporary code to help people migrate if they were depending on the
+ * old, non-proto3-json-compliant field names. In this case we
+ * recognize both old names and new names. */
+ upb_strtable_insert(t, upb_fielddef_name(f), upb_value_constptr(f));
+ }
+
if (upb_fielddef_issubmsg(f)) {
add_jsonname_table(m, upb_fielddef_msgsubdef(f));
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback