diff --git a/src/pipewire/client.c b/src/pipewire/client.c index c5257c227..2730c3d0c 100644 --- a/src/pipewire/client.c +++ b/src/pipewire/client.c @@ -370,9 +370,18 @@ int pw_client_update_properties(struct pw_client *client, const struct spa_dict struct pw_resource *resource; uint32_t i, changed = 0; - for (i = 0; i < dict->n_items; i++) - changed += pw_properties_set(client->properties, - dict->items[i].key, dict->items[i].value); + for (i = 0; i < dict->n_items; i++) { + const char *key = dict->items[i].key, *old, *val = dict->items[i].value; + + if (strstr(key, "pipewire.") == key && + (old = pw_properties_get(client->properties, key)) != NULL && + (val == NULL || strcmp(old, val))) { + pw_log_warn("client %p: refused update of key %s from %s to %s", + client, key, old, val); + continue; + } + changed += pw_properties_set(client->properties, key, val); + } pw_log_debug("client %p: updated %d properties", client, changed); diff --git a/src/pipewire/core.c b/src/pipewire/core.c index fc49d445e..7c74b2a41 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -117,7 +117,8 @@ static void core_hello(void *object) static void core_client_update(void *object, const struct spa_dict *props) { struct pw_resource *resource = object; - pw_client_update_properties(resource->client, props); + struct pw_client *client = resource->client; + pw_client_update_properties(client, props); } static void core_permissions(void *object, const struct spa_dict *props)