diff options
Diffstat (limited to 'library/cpp/yson/node/node_io_ut.cpp')
| -rw-r--r-- | library/cpp/yson/node/node_io_ut.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/library/cpp/yson/node/node_io_ut.cpp b/library/cpp/yson/node/node_io_ut.cpp new file mode 100644 index 00000000000..90720cd3a1b --- /dev/null +++ b/library/cpp/yson/node/node_io_ut.cpp @@ -0,0 +1,53 @@ +#include "node_io.h" + +#include <library/cpp/testing/unittest/registar.h> + +#include <util/stream/mem.h> + +using namespace NYson; + +namespace { + void GenerateDeepJson(TStringStream& stream, ui64 depth) { + stream << "{\"key\":"; + for (ui32 i = 0; i < depth - 1; ++i) { + stream << "["; + } + for (ui32 i = 0; i < depth - 1; ++i) { + stream << "]"; + } + stream << "}"; + } +} + +Y_UNIT_TEST_SUITE(TestNodeFromJsonStringIterativeTest) { + Y_UNIT_TEST(NoCrashOn1e5Brackets) { + constexpr ui32 brackets = static_cast<ui32>(1e5); + + TStringStream jsonStream; + GenerateDeepJson(jsonStream, brackets); + + UNIT_ASSERT_EXCEPTION( + NYT::NodeFromJsonStringIterative(jsonStream.Str()), + std::exception); + } + + Y_UNIT_TEST(NoCrashOn1025Brackets) { + constexpr ui32 brackets = 1025; + + TStringStream jsonStream; + GenerateDeepJson(jsonStream, brackets); + + UNIT_ASSERT_EXCEPTION( + NYT::NodeFromJsonStringIterative(jsonStream.Str()), + std::exception); + } + + Y_UNIT_TEST(NoErrorOn1024Brackets) { + constexpr ui32 brackets = 1024; + + TStringStream jsonStream; + GenerateDeepJson(jsonStream, brackets); + + UNIT_ASSERT_NO_EXCEPTION(NYT::NodeFromJsonStringIterative(jsonStream.Str())); + } +} |
