diff --git a/src/nodeevents.cpp b/src/nodeevents.cpp index 721f9c6..879c2ce 100644 --- a/src/nodeevents.cpp +++ b/src/nodeevents.cpp @@ -19,9 +19,10 @@ namespace YAML return it->second; } - NodeEvents::NodeEvents(const Node& node): m_pMemory(node.m_pMemory), m_root(*node.m_pNode) + NodeEvents::NodeEvents(const Node& node): m_pMemory(node.m_pMemory), m_root(node.m_pNode) { - Setup(m_root); + if(m_root) + Setup(*m_root); } void NodeEvents::Setup(const detail::node& node) @@ -47,7 +48,8 @@ namespace YAML AliasManager am; handler.OnDocumentStart(Mark()); - Emit(m_root, handler, am); + if(m_root) + Emit(*m_root, handler, am); handler.OnDocumentEnd(); } diff --git a/src/nodeevents.h b/src/nodeevents.h index d142115..ba31226 100644 --- a/src/nodeevents.h +++ b/src/nodeevents.h @@ -46,7 +46,7 @@ namespace YAML private: detail::shared_memory_holder m_pMemory; - detail::node& m_root; + detail::node* m_root; typedef std::map RefCount; RefCount m_refCount; diff --git a/src/ostream_wrapper.cpp b/src/ostream_wrapper.cpp index 15d9f0f..66cafda 100644 --- a/src/ostream_wrapper.cpp +++ b/src/ostream_wrapper.cpp @@ -4,7 +4,7 @@ namespace YAML { - ostream_wrapper::ostream_wrapper(): m_pStream(0), m_pos(0), m_row(0), m_col(0), m_comment(false) + ostream_wrapper::ostream_wrapper(): m_buffer(1), m_pStream(0), m_pos(0), m_row(0), m_col(0), m_comment(false) { } diff --git a/test/new-api/nodetests.cpp b/test/new-api/nodetests.cpp index e1140f8..cb53ad8 100644 --- a/test/new-api/nodetests.cpp +++ b/test/new-api/nodetests.cpp @@ -506,6 +506,15 @@ namespace Test YAML_ASSERT(node.as() == x); return true; } + + TEST EmitEmptyNode() + { + YAML::Node node; + YAML::Emitter emitter; + emitter << node; + YAML_ASSERT(std::string(emitter.c_str()) == ""); + return true; + } } void RunNodeTest(TEST (*test)(), const std::string& name, int& passed, int& total) { @@ -569,6 +578,7 @@ namespace Test RunNodeTest(&Node::ResetNode, "reset node", passed, total); RunNodeTest(&Node::DereferenceIteratorError, "dereference iterator error", passed, total); RunNodeTest(&Node::FloatingPrecision, "floating precision", passed, total); + RunNodeTest(&Node::EmitEmptyNode, "emit empty node", passed, total); std::cout << "Node tests: " << passed << "/" << total << " passed\n"; return passed == total;