[git commit] ash: parser: Fix single-quoted patterns in here-documents

Denys Vlasenko vda.linux at googlemail.com
Mon Apr 2 11:29:20 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=c4c2012284c3a3a45843e9400379c84855d853ef
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Upstream commit:

    From: Herbert Xu <herbert at 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 at gigawatt.nl>
    Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c                                          |  2 +-
 shell/ash_test/ash-heredoc/heredoc_var_expand1.right |  4 ++++
 shell/ash_test/ash-heredoc/heredoc_var_expand1.tests | 11 +++++++++++
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/shell/ash.c b/shell/ash.c
index 97379cd92..70a278f42 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -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;
diff --git a/shell/ash_test/ash-heredoc/heredoc_var_expand1.right b/shell/ash_test/ash-heredoc/heredoc_var_expand1.right
new file mode 100644
index 000000000..eb221832d
--- /dev/null
+++ b/shell/ash_test/ash-heredoc/heredoc_var_expand1.right
@@ -0,0 +1,4 @@
+
+Ok1:0
+
+Ok2:0
diff --git a/shell/ash_test/ash-heredoc/heredoc_var_expand1.tests b/shell/ash_test/ash-heredoc/heredoc_var_expand1.tests
new file mode 100755
index 000000000..3b00bab7b
--- /dev/null
+++ b/shell/ash_test/ash-heredoc/heredoc_var_expand1.tests
@@ -0,0 +1,11 @@
+x='*'
+
+cat <<- EOF
+	${x#'*'}
+EOF
+echo Ok1:$?
+
+cat <<EOF
+${x#'*'}
+EOF
+echo Ok2:$?


More information about the busybox-cvs mailing list