jack: sanitize client and port names

Avoid : in client names and port names.

See #714
This commit is contained in:
Wim Taymans 2021-02-12 12:29:45 +01:00
parent 8101334b1e
commit 0ad8f0a6aa

View file

@ -2070,6 +2070,31 @@ static const struct pw_metadata_events metadata_events = {
.property = metadata_property
};
static void sanitize_name(char *name)
{
char *p;
for (p = name; *p; p++) {
switch (*p) {
case ':':
*p = ' ';
break;
}
}
}
static void sanitize_port_name(char *name)
{
char *p, *e;
if ((e = rindex(name, ':')) == NULL)
e = name + strlen(name);
for (p = name; p < e; p++) {
switch (*p) {
case ':':
*p = ' ';
break;
}
}
}
static void registry_event_global(void *data, uint32_t id,
uint32_t permissions, const char *type, uint32_t version,
const struct spa_dict *props)
@ -2085,6 +2110,7 @@ static void registry_event_global(void *data, uint32_t id,
if (strcmp(type, PW_TYPE_INTERFACE_Node) == 0) {
const char *app, *node_name;
char name[JACK_CLIENT_NAME_SIZE+1];
o = alloc_object(c);
object_type = INTERFACE_Node;
@ -2107,14 +2133,19 @@ static void registry_event_global(void *data, uint32_t id,
(str = node_name) == NULL) {
str = "node";
}
if (app && strcmp(app, str) != 0)
snprintf(o->node.name, sizeof(o->node.name), "%s/%s", app, str);
else
snprintf(o->node.name, sizeof(o->node.name), "%s", str);
ot = find_node(c, o->node.name);
if (app && strcmp(app, str) != 0)
snprintf(name, sizeof(name), "%s/%s", app, str);
else
snprintf(name, sizeof(name), "%s", str);
sanitize_name(name);
ot = find_node(c, name);
if (ot != NULL && o->node.client_id != ot->node.client_id)
snprintf(o->node.name, sizeof(o->node.name), "%s-%d", str, id);
snprintf(o->node.name, sizeof(o->node.name), "%.59s-%.4d", name, id);
else
snprintf(o->node.name, sizeof(o->node.name), "%s", name);
if ((str = spa_dict_lookup(props, PW_KEY_PRIORITY_DRIVER)) != NULL)
o->node.priority = pw_properties_parse_int(str);
@ -2196,6 +2227,7 @@ static void registry_event_global(void *data, uint32_t id,
goto exit_free;
snprintf(o->port.name, sizeof(o->port.name), "%s:%s", ot->node.name, str);
sanitize_port_name(o->port.name);
o->port.port_id = SPA_ID_INVALID;
o->port.priority = ot->node.priority;
}