@@ -1884,6 +1884,29 @@ JSONTEST_FIXTURE(CharReaderTest, parseWithStackLimit) {
18841884 }
18851885}
18861886
1887+ struct CharReaderStrictModeTest : JsonTest::TestCase {};
1888+
1889+ JSONTEST_FIXTURE (CharReaderStrictModeTest, dupKeys) {
1890+ Json::CharReaderBuilder b;
1891+ Json::Value root;
1892+ char const doc[] =
1893+ " { \" property\" : \" value\" , \" key\" : \" val1\" , \" key\" : \" val2\" }" ;
1894+ {
1895+ b.strictMode (&b.settings_ );
1896+ Json::CharReader* reader (b.newCharReader ());
1897+ std::string errs;
1898+ bool ok = reader->parse (
1899+ doc, doc + std::strlen (doc),
1900+ &root, &errs);
1901+ JSONTEST_ASSERT (!ok);
1902+ JSONTEST_ASSERT_STRING_EQUAL (
1903+ " * Line 1, Column 41\n "
1904+ " Duplicate key: 'key'\n " ,
1905+ errs);
1906+ JSONTEST_ASSERT_EQUAL (" val1" , root[" key" ]); // so far
1907+ delete reader;
1908+ }
1909+ }
18871910struct CharReaderFailIfExtraTest : JsonTest::TestCase {};
18881911
18891912JSONTEST_FIXTURE (CharReaderFailIfExtraTest, issue164) {
@@ -2305,6 +2328,8 @@ int main(int argc, const char* argv[]) {
23052328 JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithDetailError);
23062329 JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithStackLimit);
23072330
2331+ JSONTEST_REGISTER_FIXTURE (runner, CharReaderStrictModeTest, dupKeys);
2332+
23082333 JSONTEST_REGISTER_FIXTURE (runner, CharReaderFailIfExtraTest, issue164);
23092334 JSONTEST_REGISTER_FIXTURE (runner, CharReaderFailIfExtraTest, issue107);
23102335 JSONTEST_REGISTER_FIXTURE (runner, CharReaderFailIfExtraTest, commentAfterObject);
0 commit comments