From 908a69213c1bdee89882174162e0445dfd6fc2c5 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 26 Jun 2025 15:23:57 +0200 Subject: [PATCH] Fix null data_ --- src/ArduinoJson/Variant/VariantImpl.hpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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;