diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index aa2b744..d7b17a1 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -1128,6 +1128,8 @@ Value& Value::append(const Value& value) { return append(Value(value)); } Value& Value::append(Value&& value) { JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue, "in Json::Value::append: requires arrayValue"); + JSON_ASSERT_MESSAGE(&value != this, + "in Json::Value::append: appending self using move constructor is forbidden."); if (type() == nullValue) { *this = Value(arrayValue); } diff --git a/src/test_lib_json/main.cpp b/src/test_lib_json/main.cpp index d0f5364..8c622cc 100644 --- a/src/test_lib_json/main.cpp +++ b/src/test_lib_json/main.cpp @@ -2136,6 +2136,10 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, searchValueByPath) { JSONTEST_ASSERT_STRING_EQUAL(expected, outcome); } } +JSONTEST_FIXTURE_LOCAL(ValueTest, valueAppendingSelf) { + Json::Value value1{Json::ValueType::nullValue}, value2; + JSONTEST_ASSERT_THROWS(value2 = value1.append(std::move(value1))); +} struct FastWriterTest : JsonTest::TestCase {}; JSONTEST_FIXTURE_LOCAL(FastWriterTest, dropNullPlaceholders) {