Test extension slot allocation failure

This commit is contained in:
Benoit Blanchon committed 2024-08-27 16:08:47 +02:00
1 parent 0278e94fce
commit ee02c0d573
4 files changed
+70 -37

No files matched your search

+1 -2
View File
@@ -65,8 +65,7 @@ struct Converter<T, detail::enable_if_t<detail::is_integral<T>::value &&
return false;
auto resources = getResourceManager(dst);
data->clear(resources);
data->setInteger(src, resources);
return true;
return data->setInteger(src, resources);
}
static T fromJson(JsonVariantConst src) {
+4 -4
View File
@@ -427,12 +427,12 @@ class VariantData {
enable_if_t<sizeof(T) == 8, bool> setFloat(T value, ResourceManager*);
template <typename T>
enable_if_t<is_signed<T>::value> setInteger(T value,
ResourceManager* resources);
enable_if_t<is_signed<T>::value, bool> setInteger(T value,
ResourceManager* resources);
template <typename T>
enable_if_t<is_unsigned<T>::value> setInteger(T value,
ResourceManager* resources);
enable_if_t<is_unsigned<T>::value, bool> setInteger(
T value, ResourceManager* resources);
void setRawString(StringNode* s) {
ARDUINOJSON_ASSERT(type_ == VALUE_IS_NULL); // must call clear() first
+14 -12
View File
@@ -92,7 +92,7 @@ enable_if_t<sizeof(T) == 8, bool> VariantData::setFloat(
}
template <typename T>
enable_if_t<is_signed<T>::value> VariantData::setInteger(
enable_if_t<is_signed<T>::value, bool> VariantData::setInteger(
T value, ResourceManager* resources) {
ARDUINOJSON_ASSERT(type_ == VALUE_IS_NULL); // must call clear() first
(void)resources; // silence warning
@@ -104,17 +104,18 @@ enable_if_t<is_signed<T>::value> VariantData::setInteger(
#if ARDUINOJSON_USE_LONG_LONG
else {
auto extension = resources->allocExtension();
if (extension) {
type_ = VALUE_IS_INT64;
content_.asSlotId = extension.id();
extension->asInt64 = value;
}
if (!extension)
return false;
type_ = VALUE_IS_INT64;
content_.asSlotId = extension.id();
extension->asInt64 = value;
}
#endif
return true;
}
template <typename T>
enable_if_t<is_unsigned<T>::value> VariantData::setInteger(
enable_if_t<is_unsigned<T>::value, bool> VariantData::setInteger(
T value, ResourceManager* resources) {
ARDUINOJSON_ASSERT(type_ == VALUE_IS_NULL); // must call clear() first
(void)resources; // silence warning
@@ -126,13 +127,14 @@ enable_if_t<is_unsigned<T>::value> VariantData::setInteger(
#if ARDUINOJSON_USE_LONG_LONG
else {
auto extension = resources->allocExtension();
if (extension) {
type_ = VALUE_IS_UINT64;
content_.asSlotId = extension.id();
extension->asUint64 = value;
}
if (!extension)
return false;
type_ = VALUE_IS_UINT64;
content_.asSlotId = extension.id();
extension->asUint64 = value;
}
#endif
return true;
}
ARDUINOJSON_END_PRIVATE_NAMESPACE