yaml-cpp

FORK: A YAML parser and emitter in C++
git clone https://git.neptards.moe/neptards/yaml-cpp.git
Log | Files | Refs | README | LICENSE

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 }