@@ -1713,6 +1713,34 @@ JSONTEST_FIXTURE(CharReaderTest, parseWithDetailError) {
1713
1713
delete reader;
1714
1714
}
1715
1715
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
+
1716
1744
int main (int argc, const char * argv[]) {
1717
1745
JsonTest::Runner runner;
1718
1746
JSONTEST_REGISTER_FIXTURE (runner, ValueTest, checkNormalizeFloatingPointStr);
@@ -1749,6 +1777,7 @@ int main(int argc, const char* argv[]) {
1749
1777
JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithOneError);
1750
1778
JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseChineseWithOneError);
1751
1779
JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithDetailError);
1780
+ JSONTEST_REGISTER_FIXTURE (runner, CharReaderTest, parseWithStackLimit);
1752
1781
1753
1782
JSONTEST_REGISTER_FIXTURE (runner, WriterTest, dropNullPlaceholders);
1754
1783
JSONTEST_REGISTER_FIXTURE (runner, StreamWriterTest, dropNullPlaceholders);
0 commit comments