From: Jaroslav Kysela Date: Mon, 27 Jul 2020 11:18:20 +0000 (+0200) Subject: control: ctlparse - fix enum values in '' or "" X-Git-Tag: v1.2.4~40 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=a3ca4803cb8db73d01231c69620e2d18573ffba9;p=alsa-lib.git 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 --- 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;