Fixed deserializeJson() when input contains duplicate keys (fixes #1095)

This commit is contained in:
Benoit Blanchon
2019-09-27 10:01:17 +02:00
parent 713aaa3d68
commit a37480eec9
3 changed files with 14 additions and 6 deletions

View File

@ -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;