mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 12:41:17 +00:00
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:
@@ -76,6 +76,12 @@ namespace YAML
|
|||||||
|
|
||||||
const Token& token = m_scanner.peek();
|
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
|
// add non-specific tags
|
||||||
if(tag.empty())
|
if(tag.empty())
|
||||||
tag = (token.type == Token::NON_PLAIN_SCALAR ? "!" : "?");
|
tag = (token.type == Token::NON_PLAIN_SCALAR ? "!" : "?");
|
||||||
@@ -256,6 +262,7 @@ namespace YAML
|
|||||||
throw ParserException(m_scanner.mark(), ErrorMsg::END_OF_MAP_FLOW);
|
throw ParserException(m_scanner.mark(), ErrorMsg::END_OF_MAP_FLOW);
|
||||||
|
|
||||||
Token& token = m_scanner.peek();
|
Token& token = m_scanner.peek();
|
||||||
|
const Mark mark = token.mark;
|
||||||
// first check for end
|
// first check for end
|
||||||
if(token.type == Token::FLOW_MAP_END) {
|
if(token.type == Token::FLOW_MAP_END) {
|
||||||
m_scanner.pop();
|
m_scanner.pop();
|
||||||
@@ -267,7 +274,7 @@ namespace YAML
|
|||||||
m_scanner.pop();
|
m_scanner.pop();
|
||||||
HandleNode(eventHandler);
|
HandleNode(eventHandler);
|
||||||
} else {
|
} else {
|
||||||
eventHandler.OnNull(token.mark, NullAnchor);
|
eventHandler.OnNull(mark, NullAnchor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// now grab value (optional)
|
// now grab value (optional)
|
||||||
@@ -275,7 +282,7 @@ namespace YAML
|
|||||||
m_scanner.pop();
|
m_scanner.pop();
|
||||||
HandleNode(eventHandler);
|
HandleNode(eventHandler);
|
||||||
} else {
|
} else {
|
||||||
eventHandler.OnNull(token.mark, NullAnchor);
|
eventHandler.OnNull(mark, NullAnchor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_scanner.empty())
|
if(m_scanner.empty())
|
||||||
|
@@ -28,6 +28,18 @@ namespace Test
|
|||||||
EXPECT_DOC_END();
|
EXPECT_DOC_END();
|
||||||
DONE();
|
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 {
|
namespace {
|
||||||
@@ -57,6 +69,7 @@ namespace Test
|
|||||||
int total = 0;
|
int total = 0;
|
||||||
RunParserTest(&Parser::NoEndOfMapFlow, "No end of map flow", passed, total);
|
RunParserTest(&Parser::NoEndOfMapFlow, "No end of map flow", passed, total);
|
||||||
RunParserTest(&Parser::PlainScalarStartingWithQuestionMark, "Plain scalar starting with question mark", 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";
|
std::cout << "Parser tests: " << passed << "/" << total << " passed\n";
|
||||||
return passed == total;
|
return passed == total;
|
||||||
|
Reference in New Issue
Block a user