diff --git a/test/parser_test.cpp b/test/parser_test.cpp index edd699e..ecd1b23 100644 --- a/test/parser_test.cpp +++ b/test/parser_test.cpp @@ -1,9 +1,11 @@ #include "yaml-cpp/parser.h" +#include "yaml-cpp/exceptions.h" #include "mock_event_handler.h" #include "gtest/gtest.h" using YAML::Parser; using YAML::MockEventHandler; +using ::testing::NiceMock; using ::testing::StrictMock; TEST(ParserTest, Empty) { @@ -14,3 +16,14 @@ TEST(ParserTest, Empty) { StrictMock handler; EXPECT_FALSE(parser.HandleNextDocument(handler)); } + +TEST(ParserTest, CVE_2017_5950) { + std::string excessive_recursion; + for (auto i = 0; i != 16384; ++i) + excessive_recursion.push_back('['); + std::istringstream input{excessive_recursion}; + Parser parser{input}; + + NiceMock handler; + EXPECT_THROW(parser.HandleNextDocument(handler), YAML::ParserException); +}