Commit d278a9de authored by Jaroslav Kysela's avatar Jaroslav Kysela Committed by Takashi Iwai
Browse files

ALSA: core: add isascii() check to card ID generator

parent 33027006
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -654,13 +654,19 @@ void snd_card_free(struct snd_card *card)
}
EXPORT_SYMBOL(snd_card_free);

/* check, if the character is in the valid ASCII range */
static inline bool safe_ascii_char(char c)
{
	return isascii(c) && isalnum(c);
}

/* retrieve the last word of shortname or longname */
static const char *retrieve_id_from_card_name(const char *name)
{
	const char *spos = name;

	while (*name) {
		if (isspace(*name) && isalnum(name[1]))
		if (isspace(*name) && safe_ascii_char(name[1]))
			spos = name + 1;
		name++;
	}
@@ -687,12 +693,12 @@ static void copy_valid_id_string(struct snd_card *card, const char *src,
{
	char *id = card->id;

	while (*nid && !isalnum(*nid))
	while (*nid && !safe_ascii_char(*nid))
		nid++;
	if (isdigit(*nid))
		*id++ = isalpha(*src) ? *src : 'D';
	while (*nid && (size_t)(id - card->id) < sizeof(card->id) - 1) {
		if (isalnum(*nid))
		if (safe_ascii_char(*nid))
			*id++ = *nid;
		nid++;
	}
@@ -787,7 +793,7 @@ static ssize_t id_store(struct device *dev, struct device_attribute *attr,

	for (idx = 0; idx < copy; idx++) {
		c = buf[idx];
		if (!isalnum(c) && c != '_' && c != '-')
		if (!safe_ascii_char(c) && c != '_' && c != '-')
			return -EINVAL;
	}
	memcpy(buf1, buf, copy);