ash: parser: Fix VSLENGTH parsing with trailing garbage

Let's adopt Herbert Xu's patch, not waiting for it to reach dash git:
hush already has a similar fix.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2021-06-25 02:09:41 +02:00
parent ad57e4e4b2
commit 53a7a9cd8c

View File

@ -12751,7 +12751,7 @@ parsesub: {
do {
STPUTC(c, out);
c = pgetc_eatbnl();
} while (!subtype && isdigit(c));
} while ((subtype == 0 || subtype == VSLENGTH) && isdigit(c));
} else if (c != '}') {
/* $[{[#]]<specialchar>[}] */
int cc = c;
@ -12781,11 +12781,6 @@ parsesub: {
} else
goto badsub;
if (c != '}' && subtype == VSLENGTH) {
/* ${#VAR didn't end with } */
goto badsub;
}
if (subtype == 0) {
static const char types[] ALIGN1 = "}-+?=";
/* ${VAR...} but not $VAR or ${#VAR} */
@ -12842,6 +12837,8 @@ parsesub: {
#endif
}
} else {
if (subtype == VSLENGTH && c != '}')
subtype = 0;
badsub:
pungetc();
}