From: Denys Vlasenko Date: Mon, 14 Aug 2017 12:23:45 +0000 (+0200) Subject: ash: [PARSER] Catch variable length expansions on non-existant specials X-Git-Tag: 1_28_0~127 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=452cc1d9bdd7848e960919916de7c405512cad05;p=oweals%2Fbusybox.git ash: [PARSER] Catch variable length expansions on non-existant specials Upstream commit: Date: Thu, 30 Oct 2014 11:53:35 +0800 [PARSER] Catch variable length expansions on non-existant specials 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 function old new delta readtoken1 2630 2635 +5 Signed-off-by: Denys Vlasenko --- diff --git a/shell/ash.c b/shell/ash.c index 15c7c325a..1917b552c 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -12119,7 +12119,7 @@ parsesub: { STPUTC(c, out); c = pgetc_eatbnl(); } while (isdigit(c)); - } else if (is_special(c)) { + } else { /* $[{[#]][}] */ int cc = c; @@ -12137,10 +12137,16 @@ parsesub: { cc = '#'; } } + + if (!is_special(cc)) { + if (subtype == VSLENGTH) + subtype = 0; + goto badsub; + } + USTPUTC(cc, out); - } else { - goto badsub; } + if (c != '}' && subtype == VSLENGTH) { /* ${#VAR didn't end with } */ goto badsub;