Sfoglia il codice sorgente

Fix crash when adding an object member in a too small `JsonDocument`

Benoit Blanchon 4 anni fa
parent
commit
ee12155617

+ 5 - 0
CHANGELOG.md

@@ -1,6 +1,11 @@
 ArduinoJson: change log
 =======================
 
+HEAD
+----
+
+* Fix crash when adding an object member in a too small `JsonDocument`
+
 v6.19.0 (2022-01-08)
 -------
 

+ 6 - 0
extras/tests/JsonDocument/overflowed.cpp

@@ -35,6 +35,12 @@ TEST_CASE("JsonDocument::overflowed()") {
     CHECK(doc.overflowed() == false);
   }
 
+  SECTION("returns true after a failed member add") {
+    StaticJsonDocument<1> doc;
+    doc["example"] = true;
+    CHECK(doc.overflowed() == true);
+  }
+
   SECTION("returns true after a failed deserialization") {
     StaticJsonDocument<JSON_ARRAY_SIZE(1)> doc;
     deserializeJson(doc, "[\"example\"]");

+ 2 - 0
src/ArduinoJson/Variant/SlotFunctions.hpp

@@ -26,6 +26,8 @@ struct SlotKeySetter {
 template <typename TAdaptedString, typename TStoragePolicy>
 inline bool slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool* pool,
                        TStoragePolicy storage) {
+  if (!var)
+    return false;
   return storage.store(key, pool, SlotKeySetter(var));
 }