Fix #3775: Skip unknown field names if they're quoted
authorNalinichandra Penke <chandrapenke@gmail.com>
Mon, 22 Feb 2016 20:27:08 +0000 (14:27 -0600)
committerNalinichandra Penke <chandrapenke@gmail.com>
Mon, 22 Feb 2016 20:34:20 +0000 (14:34 -0600)
src/idl_parser.cpp
tests/test.cpp

index adbd79e..263f650 100644 (file)
@@ -1557,8 +1557,12 @@ CheckedError Parser::SkipJsonObject() {
   for (;;) {
     if ((!opts.strict_json || !fieldn) && Is('}')) break;
 
-    if (!Is(kTokenStringConstant))
+    if (!Is(kTokenStringConstant)) {
       EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
+    }
+    else {
+      NEXT();
+    }
 
     EXPECT(':');
     ECHECK(SkipAnyJsonValue());
index fce249e..42d9e3c 100644 (file)
@@ -830,10 +830,13 @@ void UnknownFieldsTest() {
   TEST_EQ(parser.Parse("table T { str:string; i:int;}"
                        "root_type T;"
                        "{ str:\"test\","
+                       "unknown_string:\"test\","
+                       "\"unknown_string\":\"test\","
                        "unknown_int:10,"
                        "unknown_float:1.0,"
                        "unknown_array: [ 1, 2, 3, 4],"
                        "unknown_object: { i: 10 },"
+                       "\"unknown_object\": { \"i\": 10 },"
                        "i:10}"), true);
 
   std::string jsongen;