@@ -1713,6 +1713,34 @@ JSONTEST_FIXTURE(CharReaderTest, parseWithDetailError) {
17131713 delete reader;
17141714}
17151715
1716+ JSONTEST_FIXTURE (CharReaderTest, parseWithStackLimit) {
1717+ Json::CharReaderBuilder b;
1718+ Json::Value root;
1719+ char const doc[] =
1720+ " { \" property\" : \" value\" }" ;
1721+ {
1722+ b.settings_ [" stackLimit" ] = 2 ;
1723+ Json::CharReader* reader (b.newCharReader ());
1724+ std::string errs;
1725+ bool ok = reader->parse (
1726+ doc, doc + std::strlen (doc),
1727+ &root, &errs);
1728+ JSONTEST_ASSERT (ok);
1729+ JSONTEST_ASSERT (errs == " " );
1730+ JSONTEST_ASSERT_EQUAL (" value" , root[" property" ]);
1731+ delete reader;
1732+ }
1733+ {
1734+ b.settings_ [" stackLimit" ] = 1 ;
1735+ Json::CharReader* reader (b.newCharReader ());
1736+ std::string errs;
1737+ JSONTEST_ASSERT_THROWS (reader->parse (
1738+ doc, doc + std::strlen (doc),
1739+ &root, &errs));
1740+ delete reader;
1741+ }
1742+ }
1743+
17161744int main (int argc, const char * argv[]) {
17171745 JsonTest::Runner runner;
17181746 JSONTEST_REGISTER_FIXTURE (runner, ValueTest, checkNormalizeFloatingPointStr);
@@ -1749,6 +1777,7 @@ int main(int argc, const char* argv[]) {
17491777 JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithOneError);
17501778 JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseChineseWithOneError);
17511779 JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithDetailError);
1780+ JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithStackLimit);
17521781
17531782 JSONTEST_REGISTER_FIXTURE (runner, WriterTest, dropNullPlaceholders);
17541783 JSONTEST_REGISTER_FIXTURE (runner, StreamWriterTest, dropNullPlaceholders);
0 commit comments