pulse-server: Make sure we don't send null name and description

We can't send a null name or description because that makes clients
crash.
This commit is contained in:
Wim Taymans 2021-04-05 17:36:38 +02:00
parent 026e3882d2
commit bdbd3e3f2e

View file

@ -4050,20 +4050,23 @@ static int fill_sink_info(struct client *client, struct message *m,
uint32_t flags; uint32_t flags;
struct card_info card_info = CARD_INFO_INIT; struct card_info card_info = CARD_INFO_INIT;
struct device_info dev_info = DEVICE_INFO_INIT(PW_DIRECTION_OUTPUT); struct device_info dev_info = DEVICE_INFO_INIT(PW_DIRECTION_OUTPUT);
size_t size;
if (!object_is_sink(o) || info == NULL || info->props == NULL) if (!object_is_sink(o) || info == NULL || info->props == NULL)
return -ENOENT; return -ENOENT;
if ((name = spa_dict_lookup(info->props, PW_KEY_NODE_NAME)) != NULL) { name = spa_dict_lookup(info->props, PW_KEY_NODE_NAME);
size_t size = strlen(name) + 10; if ((desc = spa_dict_lookup(info->props, PW_KEY_NODE_DESCRIPTION)) == NULL)
desc = name ? name : "Unknown";
if (name == NULL)
name = "unknown";
size = strlen(name) + 10;
monitor_name = alloca(size); monitor_name = alloca(size);
if (object_is_source(o)) if (object_is_source(o))
snprintf(monitor_name, size, "%s", name); snprintf(monitor_name, size, "%s", name);
else else
snprintf(monitor_name, size, "%s.monitor", name); snprintf(monitor_name, size, "%s.monitor", name);
}
if ((desc = spa_dict_lookup(info->props, PW_KEY_NODE_DESCRIPTION)) == NULL)
desc = name;
if ((str = spa_dict_lookup(info->props, PW_KEY_MODULE_ID)) != NULL) if ((str = spa_dict_lookup(info->props, PW_KEY_MODULE_ID)) != NULL)
module_id = (uint32_t)atoi(str); module_id = (uint32_t)atoi(str);
@ -4188,24 +4191,25 @@ static int fill_source_info(struct client *client, struct message *m,
uint32_t flags; uint32_t flags;
struct card_info card_info = CARD_INFO_INIT; struct card_info card_info = CARD_INFO_INIT;
struct device_info dev_info = DEVICE_INFO_INIT(PW_DIRECTION_INPUT); struct device_info dev_info = DEVICE_INFO_INIT(PW_DIRECTION_INPUT);
size_t size;
is_monitor = object_is_monitor(o); is_monitor = object_is_monitor(o);
if ((!object_is_source(o) && !is_monitor) || info == NULL || info->props == NULL) if ((!object_is_source(o) && !is_monitor) || info == NULL || info->props == NULL)
return -ENOENT; return -ENOENT;
if ((name = spa_dict_lookup(info->props, PW_KEY_NODE_NAME)) != NULL) { name = spa_dict_lookup(info->props, PW_KEY_NODE_NAME);
size_t size = strlen(name) + 10; if ((desc = spa_dict_lookup(info->props, PW_KEY_NODE_DESCRIPTION)) == NULL)
desc = name ? name : "Unknown";
if (name == NULL)
name = "unknown";
size = strlen(name) + 10;
monitor_name = alloca(size); monitor_name = alloca(size);
snprintf(monitor_name, size, "%s.monitor", name); snprintf(monitor_name, size, "%s.monitor", name);
}
if ((desc = spa_dict_lookup(info->props, PW_KEY_NODE_DESCRIPTION)) != NULL) { size = strlen(desc) + 20;
size_t size = strlen(desc) + 20;
monitor_desc = alloca(size); monitor_desc = alloca(size);
snprintf(monitor_desc, size, "Monitor of %s", desc); snprintf(monitor_desc, size, "Monitor of %s", desc);
} else {
desc = name;
monitor_desc = monitor_name;
}
if ((str = spa_dict_lookup(info->props, PW_KEY_MODULE_ID)) != NULL) if ((str = spa_dict_lookup(info->props, PW_KEY_MODULE_ID)) != NULL)
module_id = (uint32_t)atoi(str); module_id = (uint32_t)atoi(str);