Set parent pointers for values inserted via update() (fixes #3007).

This commit is contained in:
Anthony Van Herrewege 2021-09-09 15:32:51 +02:00
parent bbdb29c658
commit 42b77b5c92
3 changed files with 23 additions and 0 deletions

View File

@ -6009,6 +6009,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
for (auto it = j.cbegin(); it != j.cend(); ++it)
{
m_value.object->operator[](it.key()) = it.value();
#if JSON_DIAGNOSTICS
m_value.object->operator[](it.key()).m_parent = this;
#endif
}
}

View File

@ -23414,6 +23414,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
for (auto it = j.cbegin(); it != j.cend(); ++it)
{
m_value.object->operator[](it.key()) = it.value();
#if JSON_DIAGNOSTICS
m_value.object->operator[](it.key()).m_parent = this;
#endif
}
}

View File

@ -679,6 +679,23 @@ TEST_CASE("regression tests 2")
test3[json::json_pointer(p)] = json::object();
CHECK(test3.dump() == "{\"/root\":{}}");
}
SECTION("issue #3007 - Parent pointers properly set when using update()")
{
json j = json::object();
json lower = json::object();
{
json j2 = json::object();
j2["one"] = 1;
j.update(j2);
}
for (auto const & kv : j) {
CHECK(kv.m_parent == &j);
}
}
}
DOCTEST_CLANG_SUPPRESS_WARNING_POP