ash: parser: Fix single-quoted patterns in here-documents

Upstream commit:

    From: Herbert Xu <herbert@gondor.apana.org.au>
    Date: Fri, 9 Mar 2018 23:07:53 +0800
    parser: Fix single-quoted patterns in here-documents

    The script

            x=*
            cat <<- EOF
                    ${x#'*'}
            EOF

    prints * instead of nothing as it should.  The problem is that
    when we're in sqsyntax context in a here-document, we won't add
    CTLESC as we should.  This patch fixes it:

    Reported-by: Harald van Dijk <harald@gigawatt.nl>
    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-02 13:29:20 +02:00
parent 8b536eb40d
commit c4c2012284
3 changed files with 16 additions and 1 deletions

View File

@ -12005,7 +12005,7 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs)
}
}
#endif
if (eofmark == NULL || synstack->dblquote)
if (!eofmark || synstack->dblquote || synstack->varnest)
USTPUTC(CTLESC, out);
USTPUTC(c, out);
break;

View File

@ -0,0 +1,4 @@
Ok1:0
Ok2:0

View File

@ -0,0 +1,11 @@
x='*'
cat <<- EOF
${x#'*'}
EOF
echo Ok1:$?
cat <<EOF
${x#'*'}
EOF
echo Ok2:$?