From 2c3ae1c18127f1d725b39a65a6d8eb1f17dd7e60 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Fri, 13 Aug 2021 10:35:04 +0200 Subject: [PATCH] Filter: exact match takes precedence over wildcard (fixes #1628) --- CHANGELOG.md | 1 + extras/tests/JsonDeserializer/filter.cpp | 9 +++++++++ src/ArduinoJson/Deserialization/Filter.hpp | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d62f799..46819773 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ HEAD * Fixed error `'dummy' may be used uninitialized` on GCC 11 * Fixed error `expected unqualified-id before 'const'` on GCC 11 (issue #1622) +* Filter: exact match takes precedence over wildcard (issue #1628) v6.18.3 (2021-07-27) ------- diff --git a/extras/tests/JsonDeserializer/filter.cpp b/extras/tests/JsonDeserializer/filter.cpp index db7371dd..6e240814 100644 --- a/extras/tests/JsonDeserializer/filter.cpp +++ b/extras/tests/JsonDeserializer/filter.cpp @@ -232,6 +232,15 @@ TEST_CASE("Filtering") { "{\"example\":{\"outcome\":42}}", 2 * JSON_OBJECT_SIZE(1) + 16 }, + { + // exclusion filter (issue #1628) + "{\"example\":1,\"ignored\":2}", + "{\"*\":true,\"ignored\":false}", + 10, + DeserializationError::Ok, + "{\"example\":1}", + JSON_OBJECT_SIZE(1) + 8 + }, { // only the first element of array counts "[1,2,3]", diff --git a/src/ArduinoJson/Deserialization/Filter.hpp b/src/ArduinoJson/Deserialization/Filter.hpp index 7ea3078d..de94b940 100644 --- a/src/ArduinoJson/Deserialization/Filter.hpp +++ b/src/ArduinoJson/Deserialization/Filter.hpp @@ -32,8 +32,8 @@ class Filter { Filter operator[](const TKey& key) const { if (_variant == true) // "true" means "allow recursively" return *this; - else - return Filter(_variant[key] | _variant["*"]); + VariantConstRef member = _variant[key]; + return Filter(member.isNull() ? _variant["*"] : member); } private: