ash: parser: Fix parsing of ${}

Upstream commit:

    Date: Tue, 3 Apr 2018 00:40:25 +0800
    parser: Fix parsing of ${}

    dash -c 'echo ${}' should print "Bad subtitution" but instead
    fails with "Syntax error: Missing '}'".  This is caused by us
    reading an extra character beyond the right brace.  This patch
    fixes it so that this construct only fails during expansion rather
    than during parsing.

    Fixes: 3df3edd13389 ("[PARSER] Report substition errors at...")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

function                                             old     new   delta
readtoken1                                          2907    2916      +9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-08-05 15:58:13 +02:00
parent 19358cc313
commit 58eb805c2c

View File

@ -12431,7 +12431,7 @@ parsesub: {
STPUTC(c, out); STPUTC(c, out);
c = pgetc_eatbnl(); c = pgetc_eatbnl();
} while (isdigit(c)); } while (isdigit(c));
} else { } else if (c != '}') {
/* $[{[#]]<specialchar>[}] */ /* $[{[#]]<specialchar>[}] */
int cc = c; int cc = c;
@ -12457,7 +12457,8 @@ parsesub: {
} }
USTPUTC(cc, out); USTPUTC(cc, out);
} } else
goto badsub;
if (c != '}' && subtype == VSLENGTH) { if (c != '}' && subtype == VSLENGTH) {
/* ${#VAR didn't end with } */ /* ${#VAR didn't end with } */