Merge null string bug fix from core, plus bug fix regarding use-after-delete for a token that seems to have been ignored.

This commit is contained in:
Jesse Beder 2013-04-13 18:25:37 -05:00
commit e5aa599b27
2 changed files with 22 additions and 2 deletions

View File

@ -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())
@ -256,6 +262,7 @@ namespace YAML
throw ParserException(m_scanner.mark(), ErrorMsg::END_OF_MAP_FLOW);
Token& token = m_scanner.peek();
const Mark mark = token.mark;
// first check for end
if(token.type == Token::FLOW_MAP_END) {
m_scanner.pop();
@ -267,7 +274,7 @@ namespace YAML
m_scanner.pop();
HandleNode(eventHandler);
} else {
eventHandler.OnNull(token.mark, NullAnchor);
eventHandler.OnNull(mark, NullAnchor);
}
// now grab value (optional)
@ -275,7 +282,7 @@ namespace YAML
m_scanner.pop();
HandleNode(eventHandler);
} else {
eventHandler.OnNull(token.mark, NullAnchor);
eventHandler.OnNull(mark, NullAnchor);
}
if(m_scanner.empty())

View File

@ -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;