diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 17f9f253..c4cece47 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -19,7 +19,7 @@ inline void VariantImpl::setRawString(SerializedValue value) { } inline bool VariantImpl::setLinkedString(const char* s) { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first + ARDUINOJSON_ASSERT(isNull()); // must call clear() first ARDUINOJSON_ASSERT(s); auto slotId = resources_->saveStaticString(s); @@ -33,7 +33,7 @@ inline bool VariantImpl::setLinkedString(const char* s) { template inline bool VariantImpl::setString(TAdaptedString value) { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first + ARDUINOJSON_ASSERT(isNull()); // must call clear() first if (!data_) return false; @@ -90,7 +90,10 @@ inline const char* VariantImpl::asLinkedString() const { template enable_if_t VariantImpl::setFloat(T value) { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first + ARDUINOJSON_ASSERT(isNull()); // must call clear() first + + if (!data_) + return false; float valueAsFloat = static_cast(value); @@ -115,7 +118,10 @@ enable_if_t VariantImpl::setFloat(T value) { template enable_if_t::value, bool> VariantImpl::setInteger(T value) { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first + ARDUINOJSON_ASSERT(isNull()); // must call clear() first + + if (!data_) + return false; if (canConvertNumber(value)) { data_->type = VariantType::Int32; @@ -136,7 +142,10 @@ enable_if_t::value, bool> VariantImpl::setInteger(T value) { template enable_if_t::value, bool> VariantImpl::setInteger(T value) { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first + ARDUINOJSON_ASSERT(isNull()); // must call clear() first + + if (!data_) + return false; if (canConvertNumber(value)) { data_->type = VariantType::Uint32;