Setting a field twice in a JSON object now gives error.
authorWouter van Oortmerssen <wvo@google.com>
Wed, 3 Sep 2014 21:48:37 +0000 (14:48 -0700)
committerWouter van Oortmerssen <wvo@google.com>
Wed, 3 Sep 2014 21:48:37 +0000 (14:48 -0700)
Before, it would crash in FlatBufferBuilder.

Bug: 17357164
Change-Id: I6e6dbada5261745220345379eb53eb3eb113e8f8
Tested: on Linux.

src/idl_parser.cpp
tests/test.cpp

index 9911fab..4c60fd7 100644 (file)
@@ -457,6 +457,10 @@ uoffset_t Parser::ParseTable(const StructDef &struct_def) {
                             || struct_def.fields.vec[fieldn] != field)) {
        Error("struct field appearing out of order: " + name);
     }
+    for (auto it = field_stack_.rbegin();
+             it != field_stack_.rbegin() + fieldn; ++it) {
+      if (it->second == field) Error("field already set: " + name);
+    }
     Expect(':');
     Value val = field->value;
     ParseAnyValue(val, field);
index 03955e3..4cd4fd1 100644 (file)
@@ -490,6 +490,7 @@ void ErrorTest() {
   TestError("union Z { X } struct X { Y:int; }", "only tables");
   TestError("table X { Y:[int]; YLength:int; }", "clash");
   TestError("table X { Y:string = 1; }", "scalar");
+  TestError("table X { Y:byte; } root_type X; { Y:1, Y:2 }", "already set");
 }
 
 // Additional parser testing not covered elsewhere.