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:
commit
e5aa599b27
@ -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())
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user