From: Denys Vlasenko Date: Sun, 22 Sep 2019 16:26:05 +0000 (+0200) Subject: ash: fix BASE###nn bashism to accept letter 'digits' for bases > 9 X-Git-Tag: 1_32_0~154 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ca1ce4b9fa2b48f8898a51782543fe32546ba1ec;p=oweals%2Fbusybox.git 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 --- diff --git a/shell/math.c b/shell/math.c index eaf4f2453..0c806ad39 100644 --- a/shell/math.c +++ b/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;