diff --git a/CHANGELOG.md b/CHANGELOG.md index 275e729d..105c2a61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ HEAD * Fix support for NUL characters in `deserializeJson()` * Make `ElementProxy` and `MemberProxy` non-copyable * Change string copy policy: only string literal are stored by pointer +* `JsonString` is now stored by copy, unless specified otherwise > ### BREAKING CHANGES > diff --git a/extras/tests/Misc/JsonString.cpp b/extras/tests/Misc/JsonString.cpp index 6b9ac5e1..50f67558 100644 --- a/extras/tests/Misc/JsonString.cpp +++ b/extras/tests/Misc/JsonString.cpp @@ -96,7 +96,7 @@ TEST_CASE("JsonString") { JsonString s("hello world", 5); CHECK(s.size() == 5); - CHECK(s.isLinked() == true); + CHECK(s.isLinked() == false); CHECK(s == "hello"); CHECK(s != "hello world"); } diff --git a/extras/tests/MsgPackSerializer/serializeVariant.cpp b/extras/tests/MsgPackSerializer/serializeVariant.cpp index 505b56ce..fdbf2a68 100644 --- a/extras/tests/MsgPackSerializer/serializeVariant.cpp +++ b/extras/tests/MsgPackSerializer/serializeVariant.cpp @@ -139,7 +139,8 @@ TEST_CASE("serialize MsgPack value") { SECTION("str 32") { std::string shortest(65536, '?'); - checkVariant(JsonString(shortest.c_str(), true), // force store by pointer + checkVariant(JsonString(shortest.c_str(), + JsonString::Linked), // force store by pointer "\xDB\x00\x01\x00\x00"_s + shortest); } diff --git a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp index 3058ad89..74cb610a 100644 --- a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp @@ -96,7 +96,7 @@ class MsgPackSerializer : public VariantDataVisitor { } size_t visit(JsonString value) { - ARDUINOJSON_ASSERT(value != NULL); + ARDUINOJSON_ASSERT(!value.isNull()); auto n = value.size(); diff --git a/src/ArduinoJson/Strings/JsonString.hpp b/src/ArduinoJson/Strings/JsonString.hpp index abf6522c..006d8f25 100644 --- a/src/ArduinoJson/Strings/JsonString.hpp +++ b/src/ArduinoJson/Strings/JsonString.hpp @@ -22,10 +22,10 @@ class JsonString { JsonString() : str_(nullptr, 0, true) {} - JsonString(const char* data, Ownership ownership = Linked) + JsonString(const char* data, Ownership ownership = Copied) : str_(data, data ? ::strlen(data) : 0, ownership == Linked) {} - JsonString(const char* data, size_t sz, Ownership ownership = Linked) + JsonString(const char* data, size_t sz, Ownership ownership = Copied) : str_(data, sz, ownership == Linked) {} // Returns a pointer to the characters. diff --git a/src/ArduinoJson/Variant/ConverterImpl.hpp b/src/ArduinoJson/Variant/ConverterImpl.hpp index 1709ceaa..296bf55f 100644 --- a/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -178,7 +178,7 @@ struct Converter : private detail::VariantAttorney { static JsonString fromJson(JsonVariantConst src) { auto data = getData(src); - return data ? data->asString() : 0; + return data ? data->asString() : JsonString(); } static bool checkJson(JsonVariantConst src) { diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index e0afb68b..3a4253fb 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -64,7 +64,8 @@ class VariantData { return visit.visit(content_.asObject); case VariantType::LinkedString: - return visit.visit(JsonString(content_.asLinkedString)); + return visit.visit( + JsonString(content_.asLinkedString, JsonString::Linked)); case VariantType::OwnedString: return visit.visit(JsonString(content_.asOwnedString->data,