From a3ca4803cb8db73d01231c69620e2d18573ffba9 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Jul 2020 13:18:20 +0200 Subject: [PATCH] control: ctlparse - fix enum values in '' or "" This comit fixes the enum value string parser (fixes aaf3a081bff1cc85635f7a3c3d4287c4addbbd84). BugLink: https://github.com/alsa-project/alsa-ucm-conf/pull/40 Signed-off-by: Jaroslav Kysela --- src/control/ctlparse.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/control/ctlparse.c b/src/control/ctlparse.c index ee1e0602..74f76cca 100644 --- a/src/control/ctlparse.c +++ b/src/control/ctlparse.c @@ -282,23 +282,27 @@ static int get_ctl_enum_item_index(snd_ctl_t *handle, if (items <= 0) return -1; + end = *ptr; + if (end == '\'' || end == '"') + ptr++; + else + end = '\0'; + for (i = 0; i < items; i++) { snd_ctl_elem_info_set_item(info, i); if (snd_ctl_elem_info(handle, info) < 0) return -1; name = snd_ctl_elem_info_get_item_name(info); - end = *ptr; - if (end == '\'' || end == '"') - ptr++; - else - end = '\0'; len = strlen(name); - if (strncmp(name, ptr, len) == 0) { - if (ptr[len] == end || ptr[len] == ',' || ptr[len] == '\n') { - ptr += len; - *ptrp = ptr; - return i; - } + if (strncmp(name, ptr, len)) + continue; + if (end == '\0' && (ptr[len] == '\0' || ptr[len] == ',' || ptr[len] == '\n')) { + *ptrp = ptr + len; + return i; + } + if (end != '\0' && ptr[len] == end) { + *ptrp = ptr + len + 1; + return i; } } return -1; -- 2.47.1