aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2016-09-03 21:58:50 +0800
committerBen Hutchings <ben@decadent.org.uk>2020-03-28 21:42:54 +0000
commit9885e7650e5daf90ddc2a9bb1dfc6af14e86ad9d (patch)
treea1a5a1534666c01e64c366a7df775361a7763003
parent58ad7304f64a22cb58cdf6f45582e7f9d30aa89d (diff)
downloadklibc-9885e7650e5daf90ddc2a9bb1dfc6af14e86ad9d.tar.gz
[klibc] dash: expand - Fix dangling left square brackets in patterns
[ dash commit ad092191a3f281c2d14089c86757305403a9de64 ] When there is an unmatched left square bracket in patterns, pmatch will behave strangely and exhibit undefined behaviour. This patch (based on Harld van Dijk's original) fixes this by treating it as a literal left square bracket. Reported-by: Olof Johansson <olof@ethup.se> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--usr/dash/expand.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/usr/dash/expand.c b/usr/dash/expand.c
index 9079b74bc3fcbc..e2d563fef29e60 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -1584,14 +1584,14 @@ pmatch(const char *pattern, const char *string)
p++;
}
found = 0;
- chr = *q++;
+ chr = *q;
if (chr == '\0')
return 0;
c = *p++;
do {
if (!c) {
p = startp;
- c = *p;
+ c = '[';
goto dft;
}
if (c == '[') {
@@ -1618,6 +1618,7 @@ pmatch(const char *pattern, const char *string)
} while ((c = *p++) != ']');
if (found == invert)
return 0;
+ q++;
break;
}
dft: default: