Fixed assignment with an empty node (new API) - a segfault that only showed up in debuggable

This commit is contained in:
Jesse Beder
2011-12-20 22:19:54 -06:00
parent add460947b
commit 812a2dc684
2 changed files with 11 additions and 1 deletions

View File

@@ -100,7 +100,9 @@ namespace YAML
// assignment // assignment
inline bool Node::is(const Node& rhs) const inline bool Node::is(const Node& rhs) const
{ {
return m_pNode ? m_pNode->is(*rhs.m_pNode) : false; if(!m_pNode || !rhs.m_pNode)
return false;
return m_pNode->is(*rhs.m_pNode);
} }
template<typename T> template<typename T>

View File

@@ -279,6 +279,13 @@ namespace Test
YAML_ASSERT(!!node["foo"]); YAML_ASSERT(!!node["foo"]);
return true; return true;
} }
TEST Reassign()
{
YAML::Node node = YAML::Load("foo");
node = YAML::Node();
return true;
}
} }
void RunNodeTest(TEST (*test)(), const std::string& name, int& passed, int& total) { void RunNodeTest(TEST (*test)(), const std::string& name, int& passed, int& total) {
@@ -324,6 +331,7 @@ namespace Test
RunNodeTest(&Node::TempMapVariableAlias, "temp map variable alias", passed, total); RunNodeTest(&Node::TempMapVariableAlias, "temp map variable alias", passed, total);
RunNodeTest(&Node::Bool, "bool", passed, total); RunNodeTest(&Node::Bool, "bool", passed, total);
RunNodeTest(&Node::AutoBoolConversion, "auto bool conversion", passed, total); RunNodeTest(&Node::AutoBoolConversion, "auto bool conversion", passed, total);
RunNodeTest(&Node::Reassign, "reassign", passed, total);
std::cout << "Node tests: " << passed << "/" << total << " passed\n"; std::cout << "Node tests: " << passed << "/" << total << " passed\n";
return passed == total; return passed == total;