forked from bblanchon/ArduinoJson
Restored JsonVariantLocal to fix the use-after-free
This commit is contained in:
@ -321,4 +321,15 @@ class JsonVariantConst : public JsonVariantProxy<const JsonVariantData>,
|
|||||||
return JsonVariantConst(objectGet(variantAsObject(_data), makeString(key)));
|
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
|
} // namespace ARDUINOJSON_NAMESPACE
|
||||||
|
@ -278,8 +278,7 @@ class MsgPackDeserializer {
|
|||||||
if (_nestingLimit == 0) return DeserializationError::TooDeep;
|
if (_nestingLimit == 0) return DeserializationError::TooDeep;
|
||||||
--_nestingLimit;
|
--_nestingLimit;
|
||||||
for (; n; --n) {
|
for (; n; --n) {
|
||||||
JsonVariantData keyData;
|
JsonVariantLocal key(_memoryPool);
|
||||||
JsonVariant key(_memoryPool, &keyData);
|
|
||||||
DeserializationError err = parse(key);
|
DeserializationError err = parse(key);
|
||||||
if (err) return err;
|
if (err) return err;
|
||||||
if (!key.is<char *>()) return DeserializationError::NotSupported;
|
if (!key.is<char *>()) return DeserializationError::NotSupported;
|
||||||
|
Reference in New Issue
Block a user