| #include <yaml-cpp/depthguard.h> | |
| #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) { | |
| Parser parser; | |
| EXPECT_FALSE(parser); | |
| StrictMock<MockEventHandler> 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<MockEventHandler> handler; | |
| EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); | |
| } | |
| TEST(ParserTest, CVE_2018_20573) { | |
| std::string excessive_recursion; | |
| for (auto i = 0; i != 20535; ++i) | |
| excessive_recursion.push_back('{'); | |
| std::istringstream input{excessive_recursion}; | |
| Parser parser{input}; | |
| NiceMock<MockEventHandler> handler; | |
| EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); | |
| } | |
| TEST(ParserTest, CVE_2018_20574) { | |
| std::string excessive_recursion; | |
| for (auto i = 0; i != 21989; ++i) | |
| excessive_recursion.push_back('{'); | |
| std::istringstream input{excessive_recursion}; | |
| Parser parser{input}; | |
| NiceMock<MockEventHandler> handler; | |
| EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); | |
| } | |
| TEST(ParserTest, CVE_2019_6285) { | |
| std::string excessive_recursion; | |
| for (auto i = 0; i != 23100; ++i) | |
| excessive_recursion.push_back('['); | |
| excessive_recursion.push_back('f'); | |
| std::istringstream input{excessive_recursion}; | |
| Parser parser{input}; | |
| NiceMock<MockEventHandler> handler; | |
| EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); | |
| } |