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

This commit is contained in:
Benoit Blanchon
2022-01-13 11:52:29 +01:00
parent 4b4c68df5f
commit ee12155617
3 changed files with 13 additions and 0 deletions

View File

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

View File

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

View File

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