summaryrefslogtreecommitdiff
path: root/alsaucm
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2011-06-02 16:45:13 -0600
committerJaroslav Kysela <perex@perex.cz>2011-06-03 11:48:12 +0200
commitf30fbe3901da0f57a6b40102ae1c3ab3a9ff6744 (patch)
treea27381003e66da0d643fb99491ab091e66d3a550 /alsaucm
parent16bdb41b87d1f4baa3a54a4af0b85abd98cf9159 (diff)
downloadalsa-utils-f30fbe3901da0f57a6b40102ae1c3ab3a9ff6744.tar.gz
alsaucm: Don't double-free empty lists
When snd_use_case_get_list (and hence also snd_use_case_card_list) returns an empty list, alsaucm still attempts to free it. This ends up double- freeing the returned list, or worse, freeing an invalid pointer, depending on how snd_use_case_get_list gets implemented. Fix alsaucm to return early on empty lists to avoid this. Signed-off-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'alsaucm')
-rw-r--r--alsaucm/usecase.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/alsaucm/usecase.c b/alsaucm/usecase.c
index f24e63e..1c94680 100644
--- a/alsaucm/usecase.c
+++ b/alsaucm/usecase.c
@@ -226,8 +226,10 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
snd_strerror(err));
return err;
}
- if (err == 0)
+ if (err == 0) {
printf(" list is empty\n");
+ return 0;
+ }
for (i = 0; i < err / 2; i++) {
printf(" %i: %s\n", i, list[i*2]);
if (list[i*2+1])
@@ -256,8 +258,10 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
snd_strerror(err));
return err;
}
- if (err == 0)
+ if (err == 0) {
printf(" list is empty\n");
+ return 0;
+ }
for (i = 0; i < err / entries; i++) {
printf(" %i: %s\n", i, list[i*entries]);
for (j = 0; j < entries - 1; j++)