From a3d7158106418ac5bb0ab5e01f82ee2fc895ce92 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 28 Mar 2022 12:39:08 +0200 Subject: [PATCH] asArray() ignores pointer (6796,5626) --- src/ArduinoJson/Variant/VariantData.hpp | 4 +--- src/ArduinoJson/Variant/VariantFunctions.hpp | 2 +- src/ArduinoJson/Variant/VariantImpl.hpp | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 9b293e89..a1afb42a 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -98,8 +98,6 @@ class VariantData { } const CollectionData *asArray() const { - if (isPointer()) // P+14 G+0 - return _content.asPointer->asArray(); return const_cast(this)->asArray(); } @@ -305,7 +303,7 @@ class VariantData { } VariantData *getElement(size_t index) const { // P+4 G+0 - const CollectionData *col = asArray(); + const CollectionData *col = resolve()->asArray(); return col ? col->getElement(index) : 0; } diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index e36e3559..2bed73dd 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -20,7 +20,7 @@ inline typename TVisitor::result_type variantAccept(const VariantData *var, } inline const CollectionData *variantAsArray(const VariantData *var) { - return var != 0 ? var->asArray() : 0; + return var != 0 ? var->resolve()->asArray() : 0; } inline const CollectionData *variantAsObject(const VariantData *var) { diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 2023c17f..8c7c16c8 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -127,7 +127,7 @@ VariantRef::to() const { } inline VariantConstRef VariantConstRef::getElement(size_t index) const { - return ArrayConstRef(_data != 0 ? _data->asArray() : 0)[index]; + return ArrayConstRef(_data != 0 ? _data->resolve()->asArray() : 0)[index]; } inline VariantRef VariantRef::addElement() const {