ash: fix BASE###nn bashism to accept letter 'digits' for bases > 9

function                                             old     new   delta
evaluate_string                                      873     876      +3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2019-09-22 18:26:05 +02:00
parent f159352112
commit ca1ce4b9fa

View File

@ -538,9 +538,16 @@ static arith_t strto_arith_t(const char *nptr, char **endptr)
n = 0;
nptr = *endptr + 1;
/* bash allows "N#" (empty "nnnn" part) */
while (isdigit(*nptr)) {
for (;;) {
unsigned digit = (unsigned)*nptr - '0';
if (digit >= 10 || digit >= base) {
digit = (unsigned)(*nptr | 0x20) - ('a' - 10);
if (digit >= base)
break;
}
/* bash does not check for overflows */
n = n * base + (*nptr++ - '0');
n = n * base + digit;
nptr++;
}
*endptr = (char*)nptr;
return n;