ash: parser: Allow newlines within parameter substitution

Upstream commit:

Date: Thu, 22 Mar 2018 21:41:24 +0800
parser: Allow newlines within parameter substitution

    On Fri, Mar 16, 2018 at 11:27:22AM +0800, Herbert Xu wrote:
    > On Thu, Mar 15, 2018 at 10:49:15PM +0100, Harald van Dijk wrote:
    > >
    > > Okay, it can be trivially modified to something that does work in other
    > > shells (even if it were actually executed), but gets rejected at parse time
    > > by dash:
    > >
    > >   if false; then
    > >     : ${$+
    > >   }
    > >   fi
    >
    > That's just a bug in dash's parser with ${} in general, because
    > it bombs out without the if clause too:
    >
    > 	: ${$+
    > 	}

    This patch fixes the parsing of newlines with parameter substitution.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-04-11 12:39:18 +02:00
parent 0403bedccc
commit 680c3016a2
5 changed files with 26 additions and 1 deletions

View File

@ -11999,8 +11999,11 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs)
CHECKSTRSPACE(4, out); /* permit 4 calls to USTPUTC */
switch (SIT(c, synstack->syntax)) {
case CNL: /* '\n' */
if (synstack->syntax == BASESYNTAX)
if (synstack->syntax == BASESYNTAX
&& !synstack->varnest
) {
goto endword; /* exit outer loop */
}
USTPUTC(c, out);
nlprompt();
c = pgetc();

View File

@ -0,0 +1,4 @@
Unquoted: H H
Quoted: H
H
Ok:0

View File

@ -0,0 +1,7 @@
echo Unquoted: H${$+
}H
echo Quoted: "H${$+
}H"
echo Ok:$?

View File

@ -0,0 +1,4 @@
Unquoted: H H
Quoted: H
H
Ok:0

View File

@ -0,0 +1,7 @@
echo Unquoted: H${$+
}H
echo Quoted: "H${$+
}H"
echo Ok:$?