summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlistair Leslie-Hughes <leslie_alistair@hotmail.com>2022-12-06 09:32:55 +1100
committerAlistair Leslie-Hughes <leslie_alistair@hotmail.com>2022-12-06 18:37:33 +1100
commite4517da353b86a527f443afa112a4773c018d7e9 (patch)
treef4b879247b744cd974a06d1af45eb73ff66f580b
parent0cbbc408aee2b5f2c42280d24dc615405387b5b1 (diff)
downloadpulseaudio-e4517da353b86a527f443afa112a4773c018d7e9.tar.gz
pactl: Stop a crash when setting the volume which is out of range
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/758>
-rw-r--r--src/utils/pactl.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index 9e343954f..d3736bc48 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -1870,6 +1870,7 @@ static void get_sink_volume_callback(pa_context *c, const pa_sink_info *i, int i
static void set_sink_volume_callback(pa_context *c, const pa_sink_info *i, int is_last, void *userdata) {
pa_cvolume cv;
+ pa_operation *o;
if (is_last < 0) {
pa_log(_("Failed to get sink information: %s"), pa_strerror(pa_context_errno(c)));
@@ -1885,7 +1886,13 @@ static void set_sink_volume_callback(pa_context *c, const pa_sink_info *i, int i
cv = i->volume;
fill_volume(&cv, i->channel_map.channels);
- pa_operation_unref(pa_context_set_sink_volume_by_name(c, sink_name, &cv, simple_callback, NULL));
+ o = pa_context_set_sink_volume_by_name(c, sink_name, &cv, simple_callback, NULL);
+ if (o)
+ pa_operation_unref(o);
+ else {
+ pa_log(_("Failed to set sink volume: %s"), pa_strerror(pa_context_errno(c)));
+ complete_action();
+ }
}
static void get_source_mute_callback(pa_context *c, const pa_source_info *i, int is_last, void *userdata) {
@@ -1929,6 +1936,7 @@ static void get_source_volume_callback(pa_context *c, const pa_source_info *i, i
static void set_source_volume_callback(pa_context *c, const pa_source_info *i, int is_last, void *userdata) {
pa_cvolume cv;
+ pa_operation *o;
if (is_last < 0) {
pa_log(_("Failed to get source information: %s"), pa_strerror(pa_context_errno(c)));
@@ -1944,7 +1952,13 @@ static void set_source_volume_callback(pa_context *c, const pa_source_info *i, i
cv = i->volume;
fill_volume(&cv, i->channel_map.channels);
- pa_operation_unref(pa_context_set_source_volume_by_name(c, source_name, &cv, simple_callback, NULL));
+ o = pa_context_set_source_volume_by_name(c, source_name, &cv, simple_callback, NULL);
+ if (o)
+ pa_operation_unref(o);
+ else {
+ pa_log(_("Failed to set source volume: %s"), pa_strerror(pa_context_errno(c)));
+ complete_action();
+ }
}
static void get_sink_input_volume_callback(pa_context *c, const pa_sink_input_info *i, int is_last, void *userdata) {