summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaek Chang <breakchange@gmail.com>2011-05-03 10:52:34 -0700
committerTakashi Iwai <tiwai@suse.de>2011-05-04 09:21:34 +0200
commit516569bbba7eb0e03f2892a67d8559c4d0bcd17a (patch)
treedff52ba583a44ec746cc72994e9a140e7f7eb42b
parente4735ddebd945d8b9f99f8e467830108080ae830 (diff)
downloadalsa-lib-516569bbba7eb0e03f2892a67d8559c4d0bcd17a.tar.gz
UCM: fix memory leak when executing cset commands
fix memory leak when executing cset commands. snd_ctl_elem's are allocated, but never free'ed Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--src/ucm/main.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/ucm/main.c b/src/ucm/main.c
index 86f29e33..f8ceeebd 100644
--- a/src/ucm/main.c
+++ b/src/ucm/main.c
@@ -173,7 +173,8 @@ static int execute_cset(snd_ctl_t *ctl, char *cset)
pos = strrchr(cset, ' ');
if (pos == NULL) {
uc_error("undefined value for cset >%s<", cset);
- return -EINVAL;
+ err = -EINVAL;
+ goto __fail;
}
*pos = '\0';
err = snd_ctl_ascii_elem_id_parse(id, cset);
@@ -196,6 +197,14 @@ static int execute_cset(snd_ctl_t *ctl, char *cset)
err = 0;
__fail:
*pos = ' ';
+
+ if (id != NULL)
+ free(id);
+ if (value != NULL)
+ free(value);
+ if (info != NULL)
+ free(info);
+
return err;
}