Fix some buglets in the error-handling of getdevice(). In particular, report

an error if the argument to pciconf -a doesn't have a unit number, rather
than triggering an assertion failure.

PR:		194506
Reported by:	Anthony Cornehl <accornehl@gmail.com>
Sponsored by:	EMC / Isilon Storage Division
This commit is contained in:
Mark Johnston 2014-10-22 23:35:56 +00:00
parent b9f6af45a5
commit d4fef7d342

View file

@ -662,16 +662,16 @@ getdevice(const char *name)
* find the start of the unit.
*/
if (name[0] == '\0')
err(1, "Empty device name");
errx(1, "Empty device name");
cp = strchr(name, '\0');
assert(cp != NULL && cp != name);
cp--;
while (cp != name && isdigit(cp[-1]))
cp--;
if (cp == name)
if (cp == name || !isdigit(*cp))
errx(1, "Invalid device name");
if ((size_t)(cp - name) + 1 > sizeof(patterns[0].pd_name))
errx(1, "Device name i2s too long");
errx(1, "Device name is too long");
memcpy(patterns[0].pd_name, name, cp - name);
patterns[0].pd_unit = strtol(cp, &cp, 10);
assert(*cp == '\0');