mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-06-25 01:11:35 +02:00
Fix support for NUL characters in deserializeJson()
This commit is contained in:
@ -1,6 +1,11 @@
|
||||
ArduinoJson: change log
|
||||
=======================
|
||||
|
||||
HEAD
|
||||
----
|
||||
|
||||
* Fix support for NUL characters in `deserializeJson()`
|
||||
|
||||
v7.2.1 (2024-11-15)
|
||||
------
|
||||
|
||||
|
@ -693,6 +693,15 @@ TEST_CASE("Filtering") {
|
||||
"null",
|
||||
0,
|
||||
},
|
||||
{
|
||||
"NUL character in key",
|
||||
"{\"x\":0,\"x\\u0000a\":1,\"x\\u0000b\":2}",
|
||||
"{\"x\\u0000a\":true}",
|
||||
10,
|
||||
DeserializationError::Ok,
|
||||
"{\"x\\u0000a\":1}",
|
||||
sizeofObject(1) + sizeofString("x?a"),
|
||||
},
|
||||
};
|
||||
|
||||
for (auto& tc : testCases) {
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <catch.hpp>
|
||||
|
||||
#include "Allocators.hpp"
|
||||
#include "Literals.hpp"
|
||||
|
||||
using ArduinoJson::detail::sizeofObject;
|
||||
|
||||
@ -322,10 +323,11 @@ TEST_CASE("deserialize JSON object") {
|
||||
|
||||
SECTION("NUL in keys") {
|
||||
DeserializationError err =
|
||||
deserializeJson(doc, "{\"x\\u0000a\":1,\"x\\u0000b\":2}");
|
||||
deserializeJson(doc, "{\"x\":0,\"x\\u0000a\":1,\"x\\u0000b\":2}");
|
||||
|
||||
REQUIRE(err == DeserializationError::Ok);
|
||||
REQUIRE(doc.as<std::string>() == "{\"x\\u0000a\":1,\"x\\u0000b\":2}");
|
||||
REQUIRE(doc.as<std::string>() ==
|
||||
"{\"x\":0,\"x\\u0000a\":1,\"x\\u0000b\":2}");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -270,10 +270,10 @@ class JsonDeserializer {
|
||||
|
||||
JsonString key = stringBuilder_.str();
|
||||
|
||||
TFilter memberFilter = filter[key.c_str()];
|
||||
TFilter memberFilter = filter[key];
|
||||
|
||||
if (memberFilter.allow()) {
|
||||
auto member = object.getMember(adaptString(key.c_str()), resources_);
|
||||
auto member = object.getMember(adaptString(key), resources_);
|
||||
if (!member) {
|
||||
// Save key in memory pool.
|
||||
auto savedKey = stringBuilder_.save();
|
||||
|
Reference in New Issue
Block a user