@@ -185,6 +185,7 @@ class VariantData {
185185#else
186186 (void )resources; // silence warning
187187#endif
188+ const char * str = nullptr ;
188189 switch (type_) {
189190 case VariantType::Boolean:
190191 return static_cast <T>(content_.asBoolean );
@@ -199,18 +200,23 @@ class VariantData {
199200 return static_cast <T>(extension->asInt64 );
200201#endif
201202 case VariantType::LinkedString:
202- return parseNumber<T>(content_.asLinkedString );
203+ str = content_.asLinkedString ;
204+ break ;
203205 case VariantType::OwnedString:
204- return parseNumber<T>(content_.asOwnedString ->data );
206+ str = content_.asOwnedString ->data ;
207+ break ;
205208 case VariantType::Float:
206209 return static_cast <T>(content_.asFloat );
207210#if ARDUINOJSON_USE_DOUBLE
208211 case VariantType::Double:
209212 return static_cast <T>(extension->asDouble );
210213#endif
211214 default :
212- return 0 ;
215+ return 0.0 ;
213216 }
217+
218+ ARDUINOJSON_ASSERT (str != nullptr );
219+ return parseNumber<T>(str);
214220 }
215221
216222 template <typename T>
@@ -221,6 +227,7 @@ class VariantData {
221227#else
222228 (void )resources; // silence warning
223229#endif
230+ const char * str = nullptr ;
224231 switch (type_) {
225232 case VariantType::Boolean:
226233 return content_.asBoolean ;
@@ -235,9 +242,11 @@ class VariantData {
235242 return convertNumber<T>(extension->asInt64 );
236243#endif
237244 case VariantType::LinkedString:
238- return parseNumber<T>(content_.asLinkedString );
245+ str = content_.asLinkedString ;
246+ break ;
239247 case VariantType::OwnedString:
240- return parseNumber<T>(content_.asOwnedString ->data );
248+ str = content_.asOwnedString ->data ;
249+ break ;
241250 case VariantType::Float:
242251 return convertNumber<T>(content_.asFloat );
243252#if ARDUINOJSON_USE_DOUBLE
@@ -247,6 +256,9 @@ class VariantData {
247256 default :
248257 return 0 ;
249258 }
259+
260+ ARDUINOJSON_ASSERT (str != nullptr );
261+ return parseNumber<T>(str);
250262 }
251263
252264 ObjectData* asObject () {
0 commit comments