Restored JsonVariantLocal to fix the use-after-free

This commit is contained in:
Benoit Blanchon
2018-10-12 21:00:00 +02:00
parent 02d809f3f4
commit 8230f8fc9b
2 changed files with 12 additions and 2 deletions

View File

@ -321,4 +321,15 @@ class JsonVariantConst : public JsonVariantProxy<const JsonVariantData>,
return JsonVariantConst(objectGet(variantAsObject(_data), makeString(key)));
}
};
class JsonVariantLocal : public JsonVariant {
public:
explicit JsonVariantLocal(MemoryPool *memoryPool)
: JsonVariant(memoryPool, &_localData) {
_localData.type = JSON_NULL;
}
private:
JsonVariantData _localData;
};
} // namespace ARDUINOJSON_NAMESPACE

View File

@ -278,8 +278,7 @@ class MsgPackDeserializer {
if (_nestingLimit == 0) return DeserializationError::TooDeep;
--_nestingLimit;
for (; n; --n) {
JsonVariantData keyData;
JsonVariant key(_memoryPool, &keyData);
JsonVariantLocal key(_memoryPool);
DeserializationError err = parse(key);
if (err) return err;
if (!key.is<char *>()) return DeserializationError::NotSupported;