mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-06-25 01:11:35 +02:00
Fixed deserializeJson() when input contains duplicate keys (fixes #1095)
This commit is contained in:
@ -6,6 +6,7 @@ HEAD
|
||||
|
||||
* Added support for custom writer classes (issue #1088)
|
||||
* Added conversion from `JsonArray` and `JsonObject` to `bool`, to be consistent with `JsonVariant`
|
||||
* Fixed `deserializeJson()` when input contains duplicate keys (issue #1095)
|
||||
|
||||
v6.12.0 (2019-09-05)
|
||||
-------
|
||||
|
@ -277,6 +277,7 @@ TEST_CASE("deserialize JSON object") {
|
||||
DeserializationError err = deserializeJson(doc, "{a:{b:{c:1}},a:2}");
|
||||
|
||||
REQUIRE(err == DeserializationError::Ok);
|
||||
REQUIRE(doc["a"] == 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -130,15 +130,21 @@ class JsonDeserializer {
|
||||
|
||||
// Read each key value pair
|
||||
for (;;) {
|
||||
// Allocate slot in object
|
||||
VariantSlot *slot = object.addSlot(_pool);
|
||||
if (!slot) return DeserializationError::NoMemory;
|
||||
|
||||
// Parse key
|
||||
const char *key;
|
||||
err = parseKey(key);
|
||||
if (err) return err;
|
||||
slot->setOwnedKey(make_not_null(key));
|
||||
|
||||
VariantData *variant = object.get(adaptString(key));
|
||||
if (!variant) {
|
||||
// Allocate slot in object
|
||||
VariantSlot *slot = object.addSlot(_pool);
|
||||
if (!slot) return DeserializationError::NoMemory;
|
||||
|
||||
slot->setOwnedKey(make_not_null(key));
|
||||
|
||||
variant = slot->data();
|
||||
}
|
||||
|
||||
// Skip spaces
|
||||
err = skipSpacesAndComments();
|
||||
@ -147,7 +153,7 @@ class JsonDeserializer {
|
||||
|
||||
// Parse value
|
||||
_nestingLimit--;
|
||||
err = parseVariant(*slot->data());
|
||||
err = parseVariant(*variant);
|
||||
_nestingLimit++;
|
||||
if (err) return err;
|
||||
|
||||
|
Reference in New Issue
Block a user