[klibc] [klibc:update-dash] dash: [PARSER] Catch variable length expansions on non-existant specials
klibc-bot for Herbert Xu
herbert at gondor.apana.org.au
Sat Mar 28 14:48:33 PDT 2020
Commit-ID: da8fe1346c93b339333207adecd8493ca1cb403a
Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=da8fe1346c93b339333207adecd8493ca1cb403a
Author: Herbert Xu <herbert at gondor.apana.org.au>
AuthorDate: Thu, 30 Oct 2014 11:53:35 +0800
Committer: Ben Hutchings <ben at decadent.org.uk>
CommitDate: Sat, 28 Mar 2020 21:42:54 +0000
[klibc] dash: [PARSER] Catch variable length expansions on non-existant specials
[ dash commit cbd6165076cbbf18e68a292f80c1d454fdbedc22 ]
Currently we only check special variable names that follow directly
after $ or ${. So errors such as ${#&} are not caught. This patch
fixes that by moving the is_special check to just before we print out
the special variable name.
Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>
Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
---
usr/dash/parser.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/usr/dash/parser.c b/usr/dash/parser.c
index 382ddf24..382658e7 100644
--- a/usr/dash/parser.c
+++ b/usr/dash/parser.c
@@ -1229,8 +1229,7 @@ varname:
STPUTC(c, out);
c = pgetc_eatbnl();
} while (is_digit(c));
- }
- else if (is_special(c)) {
+ } else {
int cc = c;
c = pgetc_eatbnl();
@@ -1251,10 +1250,14 @@ varname:
}
}
+ if (!is_special(cc)) {
+ if (subtype == VSLENGTH)
+ subtype = 0;
+ goto badsub;
+ }
+
USTPUTC(cc, out);
}
- else
- goto badsub;
if (subtype == 0) {
switch (c) {
More information about the klibc
mailing list