Fix: update() parent pointers not updated after recursive merge with JSON_DIAGNOSTICS (#5187)
* added fix for issue 4813
Signed-off-by: VasuBhakt <cpswastik31@gmail.com>
* added regression test for 4813
Signed-off-by: VasuBhakt <cpswastik31@gmail.com>
* moved test from unit-regression2 to unit-diagnostics
Signed-off-by: VasuBhakt <cpswastik31@gmail.com>
---------
Signed-off-by: VasuBhakt <cpswastik31@gmail.com>
diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp
index 47d5c51..5e44e8d 100644
--- a/include/nlohmann/json.hpp
+++ b/include/nlohmann/json.hpp
@@ -3497,6 +3497,9 @@
if (it2 != m_data.m_value.object->end())
{
it2->second.update(it.value(), true);
+#if JSON_DIAGNOSTICS
+ it2->second.set_parents();
+#endif
continue;
}
}
diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp
index 2e16ad5..d2165e8 100644
--- a/single_include/nlohmann/json.hpp
+++ b/single_include/nlohmann/json.hpp
@@ -24000,6 +24000,9 @@
if (it2 != m_data.m_value.object->end())
{
it2->second.update(it.value(), true);
+#if JSON_DIAGNOSTICS
+ it2->second.set_parents();
+#endif
continue;
}
}
diff --git a/tests/src/unit-diagnostics.cpp b/tests/src/unit-diagnostics.cpp
index c5feafe..1e8ed6a 100644
--- a/tests/src/unit-diagnostics.cpp
+++ b/tests/src/unit-diagnostics.cpp
@@ -262,4 +262,16 @@
CHECK(k.dump() == "{\"prop1\":\"prop1_value\",\"root\":\"root_str\"}");
}
+
+ SECTION("Regression test for issue #4813 - update() with merge_objects=true triggers JSON_ASSERT with JSON_DIAGNOSTICS")
+ {
+ // https://github.com/nlohmann/json/issues/4813
+ nlohmann::ordered_json j1 = {{"numbers", {{"one", 1}}}};
+ nlohmann::ordered_json const j2 = {{"numbers", {{"two", 2}}}, {"string", "t"}};
+ CHECK_NOTHROW(j1.update(j2, true));
+ CHECK(j1["numbers"]["one"] == 1);
+ CHECK(j1["numbers"]["two"] == 2);
+ CHECK(j1["string"] == "t");
+ }
}
+