X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/8f6c56a50524aa785f7e596d52dddfb331e18961..89b3af67bb32e691275bf6fa803d1834b2284115:/pexpert/gen/bootargs.c?ds=sidebyside diff --git a/pexpert/gen/bootargs.c b/pexpert/gen/bootargs.c index 73b65b997..2d7f80b3f 100644 --- a/pexpert/gen/bootargs.c +++ b/pexpert/gen/bootargs.c @@ -171,8 +171,8 @@ getval( char *s, int *val) { - register unsigned radix, intval; - register unsigned char c; + unsigned int radix, intval; + char c; int sign = 1; if (*s == '=') { @@ -181,7 +181,7 @@ getval( sign = -1, s++; intval = *s++-'0'; radix = 10; - if (intval == 0) + if (intval == 0) { switch(*s) { case 'x': @@ -205,28 +205,44 @@ getval( if (!isargsep(*s)) return (STR); } + } else if (intval >= radix) { + return (STR); + } for(;;) { - if (((c = *s++) >= '0') && (c <= '9')) + c = *s++; + if (isargsep(c)) + break; + if ((radix <= 10) && + ((c >= '0') && (c <= ('9' - (10 - radix))))) { + c -= '0'; + } else if ((radix == 16) && + ((c >= '0') && (c <= '9'))) { c -= '0'; - else if ((c >= 'a') && (c <= 'f')) + } else if ((radix == 16) && + ((c >= 'a') && (c <= 'f'))) { c -= 'a' - 10; - else if ((c >= 'A') && (c <= 'F')) + } else if ((radix == 16) && + ((c >= 'A') && (c <= 'F'))) { c -= 'A' - 10; - else if (c == 'k' || c == 'K') - { sign *= 1024; break; } - else if (c == 'm' || c == 'M') - { sign *= 1024 * 1024; break; } - else if (c == 'g' || c == 'G') - { sign *= 1024 * 1024 * 1024; break; } - else if (isargsep(c)) + } else if (c == 'k' || c == 'K') { + sign *= 1024; break; - else + } else if (c == 'm' || c == 'M') { + sign *= 1024 * 1024; + break; + } else if (c == 'g' || c == 'G') { + sign *= 1024 * 1024 * 1024; + break; + } else { return (STR); + } if (c >= radix) return (STR); intval *= radix; intval += c; } + if (!isargsep(c) && !isargsep(*s)) + return STR; *val = intval * sign; return (NUM); }