summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTanu Kaskinen <tanu.kaskinen@digia.com>2012-08-01 16:06:16 +0300
committerTakashi Iwai <tiwai@suse.de>2012-08-01 15:47:27 +0200
commite16a9a04b190c1c7981d9c65c08c504b9a23fe37 (patch)
tree706559710f49cf528bb7137ac0148646c8b93b91
parent480d3204fea75021d10132fcd2b54b7476d6cb0e (diff)
downloadalsa-lib-e16a9a04b190c1c7981d9c65c08c504b9a23fe37.tar.gz
ucm: Return NULL from get_list0() and get_list20() in case of empty lists.
alloc_str_list() sets the result to NULL too, so this patch makes the behavior more consistent. This also fixes a crash in PulseAudio, because PulseAudio assumes that snd_use_case_get_list() always initializes the result, and since snd_use_case_get_list() uses get_list20(), this assumption didn't hold. Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--src/ucm/main.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/ucm/main.c b/src/ucm/main.c
index 79901f81..4b377764 100644
--- a/src/ucm/main.c
+++ b/src/ucm/main.c
@@ -367,8 +367,10 @@ static int get_list0(struct list_head *list,
char *ptr, *str1;
cnt = alloc_str_list(list, 1, &res);
- if (cnt <= 0)
+ if (cnt <= 0) {
+ *result = NULL;
return cnt;
+ }
*result = (const char **)res;
list_for_each(pos, list) {
ptr = list_entry_offset(pos, char, offset);
@@ -414,8 +416,10 @@ static int get_list20(struct list_head *list,
char *ptr, *str1, *str2;
cnt = alloc_str_list(list, 2, &res);
- if (cnt <= 0)
+ if (cnt <= 0) {
+ *result = NULL;
return cnt;
+ }
*result = (const char **)res;
list_for_each(pos, list) {
ptr = list_entry_offset(pos, char, offset);