Blob Blame History Raw
From a3ca4803cb8db73d01231c69620e2d18573ffba9 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Mon, 27 Jul 2020 13:18:20 +0200
Subject: [PATCH 10/32] 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 <perex@perex.cz>
---
 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 ee1e0602cbf7..74f76cca9ca4 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.16.4