diff --git a/include/yaml-cpp/node/detail/impl.h b/include/yaml-cpp/node/detail/impl.h index e22bc70..5931826 100644 --- a/include/yaml-cpp/node/detail/impl.h +++ b/include/yaml-cpp/node/detail/impl.h @@ -32,7 +32,7 @@ struct get_idx& sequence, const Key& key, shared_memory_holder pMemory) { - if (key > sequence.size()) + if (key > sequence.size() || (key > 0 && !sequence[key-1]->is_defined())) return 0; if (key == sequence.size()) sequence.push_back(&pMemory->create_node()); diff --git a/test/node/node_test.cpp b/test/node/node_test.cpp index b5ba155..485ad09 100644 --- a/test/node/node_test.cpp +++ b/test/node/node_test.cpp @@ -88,11 +88,22 @@ TEST(NodeTest, MapWithUndefinedValues) { EXPECT_EQ(2, node.size()); } +TEST(NodeTest, SeqIntoMap) { + Node node; + node[0] = "test"; + node[1]; + node[2] = "value"; + EXPECT_TRUE(node.IsMap()); + EXPECT_EQ("test", node[0].as()); + EXPECT_EQ("value", node[2].as()); + EXPECT_EQ(2, node.size()); +} + TEST(NodeTest, RemoveUnassignedNode) { Node node(NodeType::Map); node["key"]; node.remove("key"); - EXPECT_EQ(node.size(), 0); + EXPECT_EQ(0, node.size()); } TEST(NodeTest, MapForceInsert) {