diff --git a/CHANGELOG.md b/CHANGELOG.md index e5adea82..1a3deccb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ArduinoJson: change log ======================= +HEAD +---- + +* `JsonObject::createNestedObject()` returns `JsonObject::invalid()` if key is null (issue #1891) + v5.13.5 ------- diff --git a/src/ArduinoJson/JsonObjectImpl.hpp b/src/ArduinoJson/JsonObjectImpl.hpp index 060bff1f..7d3a4c84 100644 --- a/src/ArduinoJson/JsonObjectImpl.hpp +++ b/src/ArduinoJson/JsonObjectImpl.hpp @@ -22,7 +22,9 @@ template inline JsonObject &JsonObject::createNestedObject_impl(TStringRef key) { if (!_buffer) return JsonObject::invalid(); JsonObject &object = _buffer->createObject(); - set(key, object); - return object; + if (set(key, object)) + return object; + else + return JsonObject::invalid(); } } // namespace ArduinoJson diff --git a/test/JsonObject/CMakeLists.txt b/test/JsonObject/CMakeLists.txt index 7a318ff1..d1c0547d 100644 --- a/test/JsonObject/CMakeLists.txt +++ b/test/JsonObject/CMakeLists.txt @@ -2,9 +2,10 @@ # Copyright Benoit Blanchon 2014-2023 # MIT License -add_executable(JsonObjectTests +add_executable(JsonObjectTests basics.cpp containsKey.cpp + createNestedObject.cpp get.cpp invalid.cpp iterator.cpp diff --git a/test/JsonObject/createNestedObject.cpp b/test/JsonObject/createNestedObject.cpp new file mode 100644 index 00000000..8da784f7 --- /dev/null +++ b/test/JsonObject/createNestedObject.cpp @@ -0,0 +1,23 @@ +// ArduinoJson - arduinojson.org +// Copyright Benoit Blanchon 2014-2023 +// MIT License + +#include + +#include + +TEST_CASE("JsonObject::createNestedObject()") { + DynamicJsonBuffer _jsonBuffer; + JsonObject& _object = _jsonBuffer.createObject(); + + SECTION("success() should return true if key is non-null") { + JsonObject& obj = _object.createNestedObject("key"); + REQUIRE(obj.success() == true); + } + + SECTION("success() should return false if key is null") { + const char* null = 0; + JsonObject& obj = _object.createNestedObject(null); + REQUIRE(obj.success() == false); + } +}