diff options
author | Stephen Warren <swarren@nvidia.com> | 2011-06-02 16:45:13 -0600 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2011-06-03 11:48:12 +0200 |
commit | f30fbe3901da0f57a6b40102ae1c3ab3a9ff6744 (patch) | |
tree | a27381003e66da0d643fb99491ab091e66d3a550 /alsaucm | |
parent | 16bdb41b87d1f4baa3a54a4af0b85abd98cf9159 (diff) | |
download | alsa-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.c | 8 |
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++) |