From 2375f2c66be267956d6ddf6a0db871eb7cbf70c0 Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Sat, 13 Apr 2013 18:21:06 -0500 Subject: [PATCH] Fix bug where the string "null" (without quotes) is deserialized as a string, instead of null. --- src/singledocparser.cpp | 6 ++++++ test/core/parsertests.cpp | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/singledocparser.cpp b/src/singledocparser.cpp index d02e9ac..e9f3222 100644 --- a/src/singledocparser.cpp +++ b/src/singledocparser.cpp @@ -75,6 +75,12 @@ namespace YAML ParseProperties(tag, anchor); const Token& token = m_scanner.peek(); + + if(token.type == Token::PLAIN_SCALAR && token.value == "null") { + eventHandler.OnNull(mark, anchor); + m_scanner.pop(); + return; + } // add non-specific tags if(tag.empty()) diff --git a/test/core/parsertests.cpp b/test/core/parsertests.cpp index 2b8b5ef..5be7953 100644 --- a/test/core/parsertests.cpp +++ b/test/core/parsertests.cpp @@ -28,6 +28,18 @@ namespace Test EXPECT_DOC_END(); DONE(); } + + TEST NullStringScalar() + { + HANDLE("foo: null"); + EXPECT_DOC_START(); + EXPECT_MAP_START("?", 0); + EXPECT_SCALAR("?", 0, "foo"); + EXPECT_NULL(0); + EXPECT_MAP_END(); + EXPECT_DOC_END(); + DONE(); + } } namespace { @@ -57,6 +69,7 @@ namespace Test int total = 0; RunParserTest(&Parser::NoEndOfMapFlow, "No end of map flow", passed, total); RunParserTest(&Parser::PlainScalarStartingWithQuestionMark, "Plain scalar starting with question mark", passed, total); + RunParserTest(&Parser::NullStringScalar, "Null string scalar", passed, total); std::cout << "Parser tests: " << passed << "/" << total << " passed\n"; return passed == total;