فهرست منبع

Fixed return value of `JsonObject::set()` (issue #350)

Benoit Blanchon 9 سال پیش
والد
کامیت
2f6f3d0629
3فایلهای تغییر یافته به همراه25 افزوده شده و 4 حذف شده
  1. 1 0
      CHANGELOG.md
  2. 6 4
      include/ArduinoJson/JsonObject.ipp
  3. 18 0
      test/JsonObject_Set_Tests.cpp

+ 1 - 0
CHANGELOG.md

@@ -5,6 +5,7 @@ HEAD
 ----
 
 * Fixed `array[idx].as<JsonVariant>()` and `object[key].as<JsonVariant>()`
+* Fixed return value of `JsonObject::set()` (issue #350)
 
 v5.6.6
 ------

+ 6 - 4
include/ArduinoJson/JsonObject.ipp

@@ -15,14 +15,16 @@ namespace ArduinoJson {
 
 template <>
 inline bool JsonObject::setNodeValue(node_type *node, String &value) {
-  node->content.value = _buffer->strdup(value);
-  return node->content.value;
+  const char *dup = _buffer->strdup(value);
+  node->content.value = dup;
+  return dup;
 }
 
 template <>
 inline bool JsonObject::setNodeValue(node_type *node, const String &value) {
-  node->content.value = _buffer->strdup(value);
-  return node->content.value;
+  const char *dup = _buffer->strdup(value);
+  node->content.value = dup;
+  return dup;
 }
 
 template <>

+ 18 - 0
test/JsonObject_Set_Tests.cpp

@@ -107,3 +107,21 @@ TEST_(StoreObjectSubscript) {
 
   EXPECT_EQ(42, _object["a"]);
 }
+
+TEST_(ShouldReturnTrue_WhenAllocationSucceeds) {
+  StaticJsonBuffer<JSON_OBJECT_SIZE(1) + 15> jsonBuffer;
+  JsonObject& obj = jsonBuffer.createObject();
+
+  bool result = obj.set(String("hello"), String("world"));
+
+  ASSERT_TRUE(result);
+}
+
+TEST_(ShouldReturnFalse_WhenAllocationFails) {
+  StaticJsonBuffer<JSON_OBJECT_SIZE(1) + 10> jsonBuffer;
+  JsonObject& obj = jsonBuffer.createObject();
+
+  bool result = obj.set(String("hello"), String("world"));
+
+  ASSERT_FALSE(result);
+}