From 3de9d3df3b3024720a8ad5cde5cf6ef9981789e3 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 22 Dec 2021 21:34:29 +0100 Subject: [PATCH] pulse-server: use safer spa_scnprintf This clamps to the max size of the input buffer so that we don't write the next item past the allocated space. --- .../module-protocol-pulse/modules/module-ladspa-sink.c | 2 +- .../module-protocol-pulse/modules/module-ladspa-source.c | 2 +- .../module-protocol-pulse/modules/module-null-sink.c | 2 +- .../module-protocol-pulse/modules/module-remap-sink.c | 2 +- .../module-protocol-pulse/modules/module-remap-source.c | 2 +- .../module-protocol-pulse/modules/module-tunnel-sink.c | 2 +- .../module-protocol-pulse/modules/module-tunnel-source.c | 2 +- src/modules/module-zeroconf-discover.c | 8 ++++---- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c b/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c index 6dafffc57..ebce6e1c0 100644 --- a/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c @@ -162,7 +162,7 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", info->channels); p = s = alloca(info->channels * 8); for (i = 0; i < info->channels; i++) - p += snprintf(p, 8, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(info->position[i])); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } diff --git a/src/modules/module-protocol-pulse/modules/module-ladspa-source.c b/src/modules/module-protocol-pulse/modules/module-ladspa-source.c index 73060bb64..eae0c8581 100644 --- a/src/modules/module-protocol-pulse/modules/module-ladspa-source.c +++ b/src/modules/module-protocol-pulse/modules/module-ladspa-source.c @@ -162,7 +162,7 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", info->channels); p = s = alloca(info->channels * 8); for (i = 0; i < info->channels; i++) - p += snprintf(p, 8, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(info->position[i])); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } diff --git a/src/modules/module-protocol-pulse/modules/module-null-sink.c b/src/modules/module-protocol-pulse/modules/module-null-sink.c index 51c8ae5fe..f8de1f609 100644 --- a/src/modules/module-protocol-pulse/modules/module-null-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-null-sink.c @@ -179,7 +179,7 @@ struct module *create_module_null_sink(struct impl *impl, const char *argument) p = s = alloca(info.channels * 8); for (i = 0; i < info.channels; i++) - p += snprintf(p, 8, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(info.position[i])); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } diff --git a/src/modules/module-protocol-pulse/modules/module-remap-sink.c b/src/modules/module-protocol-pulse/modules/module-remap-sink.c index 74d72adb4..5b1617774 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-sink.c @@ -141,7 +141,7 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", info->channels); p = s = alloca(info->channels * 8); for (i = 0; i < info->channels; i++) - p += snprintf(p, 8, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(info->position[i])); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } diff --git a/src/modules/module-protocol-pulse/modules/module-remap-source.c b/src/modules/module-protocol-pulse/modules/module-remap-source.c index 4281c6331..1deef3e43 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-source.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-source.c @@ -141,7 +141,7 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", info->channels); p = s = alloca(info->channels * 8); for (i = 0; i < info->channels; i++) - p += snprintf(p, 8, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(info->position[i])); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c index 8f5dd9f91..24f3262b1 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c @@ -146,7 +146,7 @@ static void audio_info_to_props(struct spa_audio_info_raw *info, struct pw_prope pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", info->channels); p = s = alloca(info->channels * 8); for (i = 0; i < info->channels; i++) - p += snprintf(p, 8, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(info->position[i])); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c index 26226d01f..e46780e67 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c @@ -146,7 +146,7 @@ static void audio_info_to_props(struct spa_audio_info_raw *info, struct pw_prope pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", info->channels); p = s = alloca(info->channels * 8); for (i = 0; i < info->channels; i++) - p += snprintf(p, 8, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(info->position[i])); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } diff --git a/src/modules/module-zeroconf-discover.c b/src/modules/module-zeroconf-discover.c index e33d02d81..fe53cceb5 100644 --- a/src/modules/module-zeroconf-discover.c +++ b/src/modules/module-zeroconf-discover.c @@ -209,12 +209,12 @@ static void pw_properties_from_avahi_string(const char *key, const char *value, channel_map_parse(value, &channel_map); channel_map_to_positions(&channel_map, pos); - p = s = alloca(4 + channel_map.channels * 6); - p += snprintf(p, 6, "["); + p = s = alloca(4 + channel_map.channels * 8); + p += spa_scnprintf(p, 2, "["); for (i = 0; i < channel_map.channels; i++) - p += snprintf(p, 6, "%s%s", i == 0 ? "" : ",", + p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ",", channel_id2name(pos[i])); - p += snprintf(p, 6, "]"); + p += spa_scnprintf(p, 2, "]"); pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } else if (spa_streq(key, "format")) {