From f25d01a97c61fdac5d6e0a6a8fb63b5b2b5f3393 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Mon, 8 May 2017 10:54:08 +0100 Subject: Fix combination of HERE document and |&. A missing flag setting up the HERE document mean that the size of the wordcode needed to append the 2>&1 was counted incorrectly, so the resulting wordcode was garbled. Add test. --- ChangeLog | 6 ++++++ Src/parse.c | 2 +- Test/A04redirect.ztst | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index cb270edb0..112a53d1a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-05-08 Peter Stephenson + + * 41060: Src/parse.c, Test/A04redirect.ztst: combination + of HERE document and |& was broken by miscounting wordcode owing + to missing flag. + 2017-05-04 Daniel Shahaf * 41038: NEWS: Document recent, backwards-compatible precommand diff --git a/Src/parse.c b/Src/parse.c index 6fe283dcb..83e87afed 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -2143,7 +2143,7 @@ par_redir(int *rp, char *idstring) * the definition of WC_REDIR_WORDS. */ ecispace(r, ncodes); *rp = r + ncodes; - ecbuf[r] = WCB_REDIR(type); + ecbuf[r] = WCB_REDIR(type | REDIR_FROM_HEREDOC_MASK); ecbuf[r + 1] = fd1; /* diff --git a/Test/A04redirect.ztst b/Test/A04redirect.ztst index d7fe22fb0..a5de552c1 100644 --- a/Test/A04redirect.ztst +++ b/Test/A04redirect.ztst @@ -586,3 +586,18 @@ >x >bar >y + + fn-here-pipe() { + cat <<-HERE |& cat + FOO + HERE + } + fn-here-pipe + which fn-here-pipe +0:Combination of HERE-document and |& +>FOO +>fn-here-pipe () { +> cat <&1 | cat +>FOO +>HERE +>} -- cgit 1.4.1