diff --git a/CHANGELOG.md b/CHANGELOG.md index 10e46293..7d05cb89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ArduinoJson: change log ======================= +HEAD +---- + +* Fix truncated strings on Arduino Due (issue #2181) + v7.4.1 (2025-04-11) ------ diff --git a/extras/tests/Misc/CMakeLists.txt b/extras/tests/Misc/CMakeLists.txt index 05be1ca8..66afc4f7 100644 --- a/extras/tests/Misc/CMakeLists.txt +++ b/extras/tests/Misc/CMakeLists.txt @@ -29,3 +29,23 @@ set_tests_properties(Misc PROPERTIES LABELS "Catch" ) + +add_executable(Issue2181 + issue2181.cpp # Cannot be linked with other tests +) + +set_target_properties(Issue2181 PROPERTIES UNITY_BUILD OFF) + +add_test(Issue2181 Issue2181) + +set_tests_properties(Issue2181 + PROPERTIES + LABELS "Catch" +) + +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + target_compile_options(Issue2181 + PRIVATE + -Wno-keyword-macro # keyword is hidden by macro definition + ) +endif() diff --git a/extras/tests/Misc/issue2181.cpp b/extras/tests/Misc/issue2181.cpp new file mode 100644 index 00000000..73929137 --- /dev/null +++ b/extras/tests/Misc/issue2181.cpp @@ -0,0 +1,15 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2025, Benoit BLANCHON +// MIT License + +#define true 0x1 +#define false 0x0 + +#include +#include + +TEST_CASE("Issue #2181") { + JsonDocument doc; + doc["hello"] = "world"; + REQUIRE(doc.as() == "{\"hello\":\"world\"}"); +} diff --git a/src/ArduinoJson.hpp b/src/ArduinoJson.hpp index 5818de3f..b3e71d35 100644 --- a/src/ArduinoJson.hpp +++ b/src/ArduinoJson.hpp @@ -26,6 +26,15 @@ # endif #endif +// Remove true and false macros defined by some cores, such as Arduino Due's +// See issues #2181 and arduino/ArduinoCore-sam#50 +#ifdef true +# undef true +#endif +#ifdef false +# undef false +#endif + #include "ArduinoJson/Array/JsonArray.hpp" #include "ArduinoJson/Object/JsonObject.hpp" #include "ArduinoJson/Variant/JsonVariantConst.hpp"