diff --git a/include/yaml-cpp/node/detail/impl.h b/include/yaml-cpp/node/detail/impl.h index 69f4476..e22bc70 100644 --- a/include/yaml-cpp/node/detail/impl.h +++ b/include/yaml-cpp/node/detail/impl.h @@ -132,6 +132,14 @@ inline bool node_data::remove(const Key& key, shared_memory_holder pMemory) { if (m_type != NodeType::Map) return false; + kv_pairs::iterator it = m_undefinedPairs.begin(); + while (it != m_undefinedPairs.end()) { + kv_pairs::iterator jt = std::next(it); + if (it->first->equals(key, pMemory)) + m_undefinedPairs.erase(it); + it = jt; + } + for (node_map::iterator it = m_map.begin(); it != m_map.end(); ++it) { if (it->first->equals(key, pMemory)) { m_map.erase(it); diff --git a/test/node/node_test.cpp b/test/node/node_test.cpp index 035f1d0..b5ba155 100644 --- a/test/node/node_test.cpp +++ b/test/node/node_test.cpp @@ -88,6 +88,13 @@ TEST(NodeTest, MapWithUndefinedValues) { EXPECT_EQ(2, node.size()); } +TEST(NodeTest, RemoveUnassignedNode) { + Node node(NodeType::Map); + node["key"]; + node.remove("key"); + EXPECT_EQ(node.size(), 0); +} + TEST(NodeTest, MapForceInsert) { Node node; Node k1("k1");