Deleted Added
full compact
37c37
< __FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 190878 2009-04-10 04:08:34Z thompsa $");
---
> __FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 196823 2009-09-04 09:39:06Z pjd $");
46a47
> #include <sys/ctype.h>
403c404,405
< * We only allow [a-zA-Z0-9-_@#%.:] characters, the rest is converted to 'x<HH>'.
---
> * We only allow printable characters in disk ident,
> * the rest is converted to 'x<HH>'.
408,410c410
< char newid[DISK_IDENT_SIZE], tmp[4];
< size_t len;
< char *p;
---
> char *p, tmp[4], newid[DISK_IDENT_SIZE];
412,434c412,419
< bzero(newid, sizeof(newid));
< len = 0;
< for (p = ident; *p != '\0' && len < sizeof(newid) - 1; p++) {
< switch (*p) {
< default:
< if ((*p < 'a' || *p > 'z') &&
< (*p < 'A' || *p > 'Z') &&
< (*p < '0' || *p > '9')) {
< snprintf(tmp, sizeof(tmp), "x%02hhx", *p);
< strlcat(newid, tmp, sizeof(newid));
< len += 3;
< break;
< }
< /* FALLTHROUGH */
< case '-':
< case '_':
< case '@':
< case '#':
< case '%':
< case '.':
< case ':':
< newid[len++] = *p;
< break;
---
> newid[0] = '\0';
> for (p = ident; *p != '\0'; p++) {
> if (isprint(*p)) {
> tmp[0] = *p;
> tmp[1] = '\0';
> } else {
> snprintf(tmp, sizeof(tmp), "x%02hhx",
> *(unsigned char *)p);
435a421,422
> if (strlcat(newid, tmp, sizeof(newid)) >= sizeof(newid))
> break;