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:
parent
f159352112
commit
ca1ce4b9fa
11
shell/math.c
11
shell/math.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user