From 228a48c368c90a0c7abc294da205677757effac0 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 28 Mar 2022 12:19:53 +0200 Subject: [PATCH] asFloat() ignores pointers (6808,5626) --- src/ArduinoJson/Variant/ConverterImpl.hpp | 4 +++- src/ArduinoJson/Variant/VariantData.hpp | 6 ++++++ src/ArduinoJson/Variant/VariantImpl.hpp | 2 -- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/ArduinoJson/Variant/ConverterImpl.hpp b/src/ArduinoJson/Variant/ConverterImpl.hpp index baf1187a..e8a5d42e 100644 --- a/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -103,7 +103,9 @@ struct Converter::value>::type> { static T fromJson(VariantConstRef src) { const VariantData* data = getData(src); - return data ? data->asFloat() : false; + if (!data) + return 0; + return data->resolve()->asFloat(); } static bool checkJson(VariantConstRef src) { diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 4f5745d9..1d57c6a4 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -87,6 +87,12 @@ class VariantData { bool asBoolean() const; + const VariantData *resolve() const { + if (isPointer()) + return _content.asPointer->resolve(); + return this; + } + CollectionData *asArray() { return isArrayStrict() ? &_content.asCollection : 0; } diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 628057c3..f0489b27 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -69,8 +69,6 @@ inline T VariantData::asFloat() const { return parseNumber(_content.asString.data); case VALUE_IS_FLOAT: return static_cast(_content.asFloat); - case VALUE_IS_POINTER: // P+34 G+0 - return _content.asPointer->asFloat(); default: return 0; }