mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Fix filter not working in zero-copy mode (fixes #1697)
This commit is contained in:
		| @@ -5,6 +5,7 @@ HEAD | ||||
| ---- | ||||
|  | ||||
| * Fix crash when adding an object member in a too small `JsonDocument` | ||||
| * Fix filter not working in zero-copy mode (issue #1697) | ||||
|  | ||||
| v6.19.0 (2022-01-08) | ||||
| ------- | ||||
|   | ||||
| @@ -667,6 +667,20 @@ TEST_CASE("Filtering") { | ||||
|   } | ||||
| } | ||||
|  | ||||
| TEST_CASE("Zero-copy mode") {  // issue #1697 | ||||
|   char input[] = "{\"include\":42,\"exclude\":666}"; | ||||
|  | ||||
|   StaticJsonDocument<256> filter; | ||||
|   filter["include"] = true; | ||||
|  | ||||
|   StaticJsonDocument<256> doc; | ||||
|   DeserializationError err = | ||||
|       deserializeJson(doc, input, DeserializationOption::Filter(filter)); | ||||
|  | ||||
|   REQUIRE(err == DeserializationError::Ok); | ||||
|   CHECK(doc.as<std::string>() == "{\"include\":42}"); | ||||
| } | ||||
|  | ||||
| TEST_CASE("Overloads") { | ||||
|   StaticJsonDocument<256> doc; | ||||
|   StaticJsonDocument<256> filter; | ||||
|   | ||||
| @@ -279,6 +279,22 @@ TEST_CASE("deserialize JSON object") { | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc["a"] == 2); | ||||
|     } | ||||
|  | ||||
|     SECTION("Repeated key with zero copy mode") {  // issue #1697 | ||||
|       char input[] = "{a:{b:{c:1}},a:2}"; | ||||
|       DeserializationError err = deserializeJson(doc, input); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc["a"] == 2); | ||||
|     } | ||||
|  | ||||
|     SECTION("NUL in keys") {  // we don't support NULs in keys | ||||
|       DeserializationError err = | ||||
|           deserializeJson(doc, "{\"x\\u0000a\":1,\"x\\u0000b\":2}"); | ||||
|  | ||||
|       REQUIRE(err == DeserializationError::Ok); | ||||
|       REQUIRE(doc.as<std::string>() == "{\"x\":2}"); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   SECTION("Should clear the JsonObject") { | ||||
|   | ||||
| @@ -1027,6 +1027,20 @@ TEST_CASE("deserializeMsgPack() filter") { | ||||
|   } | ||||
| } | ||||
|  | ||||
| TEST_CASE("Zero-copy mode") {  // issue #1697 | ||||
|   char input[] = "\x82\xA7include\x01\xA6ignore\x02"; | ||||
|  | ||||
|   StaticJsonDocument<256> filter; | ||||
|   filter["include"] = true; | ||||
|  | ||||
|   StaticJsonDocument<256> doc; | ||||
|   DeserializationError err = | ||||
|       deserializeMsgPack(doc, input, 18, DeserializationOption::Filter(filter)); | ||||
|  | ||||
|   CHECK(err == DeserializationError::Ok); | ||||
|   CHECK(doc.as<std::string>() == "{\"include\":1}"); | ||||
| } | ||||
|  | ||||
| TEST_CASE("Overloads") { | ||||
|   StaticJsonDocument<256> doc; | ||||
|   StaticJsonDocument<256> filter; | ||||
|   | ||||
| @@ -18,7 +18,6 @@ class StringMover { | ||||
|   } | ||||
|  | ||||
|   FORCE_INLINE String save() { | ||||
|     _writePtr[0] = 0;  // terminator | ||||
|     String s = str(); | ||||
|     _writePtr++; | ||||
|     return s; | ||||
| @@ -33,6 +32,7 @@ class StringMover { | ||||
|   } | ||||
|  | ||||
|   String str() const { | ||||
|     _writePtr[0] = 0;  // terminator | ||||
|     return String(_startPtr, size(), true); | ||||
|   } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user