diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 762e5582..df2f055b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -127,6 +127,7 @@ set(files src/unit-iterators2.cpp src/unit-json_patch.cpp src/unit-json_pointer.cpp + src/unit-large_json.cpp src/unit-merge_patch.cpp src/unit-meta.cpp src/unit-modifiers.cpp diff --git a/test/src/unit-large_json.cpp b/test/src/unit-large_json.cpp new file mode 100644 index 00000000..8122856f --- /dev/null +++ b/test/src/unit-large_json.cpp @@ -0,0 +1,49 @@ +/* + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ (test suite) +| | |__ | | | | | | version 3.7.1 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2019 Niels Lohmann . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "doctest_compatibility.h" + +#include +using nlohmann::json; + +#include + +TEST_CASE("tests on very large JSONs") +{ + SECTION("issue #1419 - Segmentation fault (stack overflow) due to unbounded recursion") + { + const auto depth = 5000000; + + std::string s(2 * depth, '['); + std::fill(s.begin() + depth, s.end(), ']'); + + CHECK_NOTHROW(nlohmann::json::parse(s)); + } +} + diff --git a/test/src/unit-regression.cpp b/test/src/unit-regression.cpp index faf2da54..f0be3132 100644 --- a/test/src/unit-regression.cpp +++ b/test/src/unit-regression.cpp @@ -1778,16 +1778,6 @@ TEST_CASE("regression tests") CHECK(expected == data); } - SECTION("issue #1419 - Segmentation fault (stack overflow) due to unbounded recursion") - { - const auto depth = 5000000; - - std::string s(2 * depth, '['); - std::fill(s.begin() + depth, s.end(), ']'); - - CHECK_NOTHROW(nlohmann::json::parse(s)); - } - SECTION("issue #1445 - buffer overflow in dumping invalid utf-8 strings") { SECTION("a bunch of -1, ensure_ascii=true")