← Commit list

ca1ce4b9f

Denys Vlasenko
Denys Vlasenko
2019-09-22
SUCCESS Duration: 150s

Subject

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

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

shell/math.c+9 -2
@@ -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;