diff --git a/CHANGELOG.md b/CHANGELOG.md index bf73d288..0839d765 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,3 +14,4 @@ HEAD * Store the strings in the heap * Reference-count shared strings * Always store `serialized("string")` by copy (#1915) +* Remove the zero-copy mode of `deserializeJson()` and `deserializeMsgPack()` diff --git a/extras/tests/JsonDeserializer/input_types.cpp b/extras/tests/JsonDeserializer/input_types.cpp index 894e210e..7c88be9a 100644 --- a/extras/tests/JsonDeserializer/input_types.cpp +++ b/extras/tests/JsonDeserializer/input_types.cpp @@ -10,20 +10,17 @@ #include "CustomReader.hpp" using ArduinoJson::detail::sizeofObject; +using ArduinoJson::detail::sizeofString; TEST_CASE("deserializeJson(char*)") { JsonDocument doc(1024); - SECTION("should not duplicate strings") { - char input[] = "{\"hello\":\"world\"}"; + char input[] = "{\"hello\":\"world\"}"; - DeserializationError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == DeserializationError::Ok); - CHECK(doc.memoryUsage() == sizeofObject(1)); - CHECK(doc.as().memoryUsage() == - sizeofObject(1)); // issue #1318 - } + REQUIRE(err == DeserializationError::Ok); + CHECK(doc.memoryUsage() == sizeofObject(1) + 2 * sizeofString(5)); } TEST_CASE("deserializeJson(unsigned char*, unsigned int)") { // issue #1897 diff --git a/extras/tests/JsonDeserializer/string.cpp b/extras/tests/JsonDeserializer/string.cpp index 521f4d1c..489dd591 100644 --- a/extras/tests/JsonDeserializer/string.cpp +++ b/extras/tests/JsonDeserializer/string.cpp @@ -154,12 +154,6 @@ TEST_CASE("String allocation fails") { REQUIRE(spyingAllocator.log() == AllocatorLog() << AllocatorLog::AllocateFail(sizeofString(31))); } - - SECTION("Input is const char*") { - char hello[] = "\"hello\""; - REQUIRE(deserializeJson(doc, hello) == DeserializationError::Ok); - REQUIRE(spyingAllocator.log() == AllocatorLog()); - } } TEST_CASE("Deduplicate values") { diff --git a/src/ArduinoJson/StringStorage/StringMover.hpp b/src/ArduinoJson/StringStorage/StringMover.hpp deleted file mode 100644 index 1b53c159..00000000 --- a/src/ArduinoJson/StringStorage/StringMover.hpp +++ /dev/null @@ -1,47 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2023, Benoit BLANCHON -// MIT License - -#pragma once - -#include -#include - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -class StringMover { - public: - StringMover(char* ptr) : writePtr_(ptr) {} - - void startString() { - startPtr_ = writePtr_; - } - - FORCE_INLINE const char* save() { - *writePtr_++ = 0; // terminator - return startPtr_; - } - - void append(char c) { - *writePtr_++ = c; - } - - bool isValid() const { - return true; - } - - JsonString str() const { - writePtr_[0] = 0; // terminator - return JsonString(startPtr_, size(), JsonString::Linked); - } - - size_t size() const { - return size_t(writePtr_ - startPtr_); - } - - private: - char* writePtr_; - char* startPtr_; -}; - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/StringStorage/StringStorage.hpp b/src/ArduinoJson/StringStorage/StringStorage.hpp index 0b1f77cc..682f1afb 100644 --- a/src/ArduinoJson/StringStorage/StringStorage.hpp +++ b/src/ArduinoJson/StringStorage/StringStorage.hpp @@ -5,7 +5,6 @@ #pragma once #include -#include ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE @@ -15,10 +14,4 @@ StringCopier makeStringStorage(TInput&, MemoryPool* pool) { return StringCopier(pool); } -template -StringMover makeStringStorage( - TChar* input, MemoryPool*, - typename enable_if::value>::type* = 0) { - return StringMover(reinterpret_cast(input)); -} ARDUINOJSON_END_PRIVATE_NAMESPACE