File 0003-json-utils-fix-overriding-of-non-container-values-when.patch of Package wireplumber
From e6a70db254585b2cd9f3265fdafc884a48c3682d Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Fri, 3 May 2024 15:54:37 +0300
Subject: [PATCH] json-utils: fix overriding of non-container values when
merging
Non-container values should always be overriden
Fixes: #653
---
lib/wp/json-utils.c | 4 ++--
tests/wplua/scripts/json.lua | 7 +++++++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/lib/wp/json-utils.c b/lib/wp/json-utils.c
index 53d1b2b1b..936ad449e 100644
--- a/lib/wp/json-utils.c
+++ b/lib/wp/json-utils.c
@@ -211,12 +211,12 @@ merge_json_objects (WpSpaJson *a, WpSpaJson *b)
g_return_val_if_fail (wp_iterator_next (it, &item), NULL);
val = g_value_dup_boxed (&item);
- if (!override &&
+ if (!override && wp_spa_json_is_container (val) &&
(wp_spa_json_object_get (a, key_str, "J", &j, NULL) ||
wp_spa_json_object_get (a, override_key_str, "J", &j, NULL))) {
g_autoptr (WpSpaJson) merged = wp_json_utils_merge_containers (j, val);
if (!merged) {
- wp_warning ("skipping merge of %s as JSON values are not compatible",
+ wp_warning ("skipping merge of %s as JSON values are not compatible containers",
key_str);
continue;
}
diff --git a/tests/wplua/scripts/json.lua b/tests/wplua/scripts/json.lua
index 03e14ba6d..5489bab23 100644
--- a/tests/wplua/scripts/json.lua
+++ b/tests/wplua/scripts/json.lua
@@ -241,6 +241,7 @@ assert (type (val.args.test) == "table")
assert (val.args.test[1] == 0)
assert (val.args.test[2] == 1)
+-- merge
json = Json.Array { "foo" }
json2 = Json.Array { "bar" }
json = json:merge(json2)
@@ -263,3 +264,9 @@ assert (val["1"] == 1)
assert (val["2"] == 2)
assert (val["3"] == 3)
assert (val["4"] == 4)
+
+json = Json.Object { ["a"] = "foo" }
+json2 = Json.Object { ["a"] = "bar" }
+json = json:merge(json2)
+val = json:parse ()
+assert (val["a"] == "bar")
--
GitLab