diff mbox series

ALSA: control led - improve the set_led_id() parser

Message ID 20210331180725.663623-1-perex@perex.cz (mailing list archive)
State New
Headers show
Series ALSA: control led - improve the set_led_id() parser | expand

Commit Message

Jaroslav Kysela March 31, 2021, 6:07 p.m. UTC
It may be possible that the string pointer does not move
when parsing. Add a code which detects this state and
simply break the parser loop in this case.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
 sound/core/control_led.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Takashi Iwai April 1, 2021, 8:06 a.m. UTC | #1
On Wed, 31 Mar 2021 20:07:25 +0200,
Jaroslav Kysela wrote:
> 
> It may be possible that the string pointer does not move
> when parsing. Add a code which detects this state and
> simply break the parser loop in this case.
> 
> Signed-off-by: Jaroslav Kysela <perex@perex.cz>

Applied, thanks.


Takashi
diff mbox series

Patch

diff --git a/sound/core/control_led.c b/sound/core/control_led.c
index d4fb8b873f34..788fd9e275e0 100644
--- a/sound/core/control_led.c
+++ b/sound/core/control_led.c
@@ -506,7 +506,7 @@  static char *parse_iface(char *s, unsigned int *val)
 static ssize_t set_led_id(struct snd_ctl_led_card *led_card, const char *buf, size_t count,
 			  bool attach)
 {
-	char buf2[256], *s;
+	char buf2[256], *s, *os;
 	size_t len = max(sizeof(s) - 1, count);
 	struct snd_ctl_elem_id id;
 	int err;
@@ -517,6 +517,7 @@  static ssize_t set_led_id(struct snd_ctl_led_card *led_card, const char *buf, si
 	id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
 	s = buf2;
 	while (*s) {
+		os = s;
 		if (!strncasecmp(s, "numid=", 6)) {
 			s = parse_uint(s + 6, &id.numid);
 		} else if (!strncasecmp(s, "iface=", 6)) {
@@ -546,6 +547,8 @@  static ssize_t set_led_id(struct snd_ctl_led_card *led_card, const char *buf, si
 		}
 		if (*s == ',')
 			s++;
+		if (s == os)
+			break;
 	}
 
 	err = snd_ctl_led_set_id(led_card->number, &id, led_card->led->group, attach);