parser_test.cpp (1869B)
1 #include <yaml-cpp/depthguard.h> 2 #include "yaml-cpp/parser.h" 3 #include "yaml-cpp/exceptions.h" 4 #include "mock_event_handler.h" 5 #include "gtest/gtest.h" 6 7 using YAML::Parser; 8 using YAML::MockEventHandler; 9 using ::testing::NiceMock; 10 using ::testing::StrictMock; 11 12 TEST(ParserTest, Empty) { 13 Parser parser; 14 15 EXPECT_FALSE(parser); 16 17 StrictMock<MockEventHandler> handler; 18 EXPECT_FALSE(parser.HandleNextDocument(handler)); 19 } 20 21 TEST(ParserTest, CVE_2017_5950) { 22 std::string excessive_recursion; 23 for (auto i = 0; i != 16384; ++i) 24 excessive_recursion.push_back('['); 25 std::istringstream input{excessive_recursion}; 26 Parser parser{input}; 27 28 NiceMock<MockEventHandler> handler; 29 EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); 30 } 31 32 TEST(ParserTest, CVE_2018_20573) { 33 std::string excessive_recursion; 34 for (auto i = 0; i != 20535; ++i) 35 excessive_recursion.push_back('{'); 36 std::istringstream input{excessive_recursion}; 37 Parser parser{input}; 38 39 NiceMock<MockEventHandler> handler; 40 EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); 41 } 42 43 TEST(ParserTest, CVE_2018_20574) { 44 std::string excessive_recursion; 45 for (auto i = 0; i != 21989; ++i) 46 excessive_recursion.push_back('{'); 47 std::istringstream input{excessive_recursion}; 48 Parser parser{input}; 49 50 NiceMock<MockEventHandler> handler; 51 EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); 52 } 53 54 TEST(ParserTest, CVE_2019_6285) { 55 std::string excessive_recursion; 56 for (auto i = 0; i != 23100; ++i) 57 excessive_recursion.push_back('['); 58 excessive_recursion.push_back('f'); 59 std::istringstream input{excessive_recursion}; 60 Parser parser{input}; 61 62 NiceMock<MockEventHandler> handler; 63 EXPECT_THROW(parser.HandleNextDocument(handler), YAML::DeepRecursion); 64 }