ash: [PARSER] Removed noexpand/length check on eofmark
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 29 Jul 2017 17:57:28 +0000 (19:57 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 29 Jul 2017 17:57:28 +0000 (19:57 +0200)
commita732898fdd9748b966da228ee8bbbc148c3c10c9
tree6a77b07cc830a0bec815b27927a4af85846d1666
parent170f93ef1bc49a9e4c68f85f5245416767c1916f
ash: [PARSER] Removed noexpand/length check on eofmark

Upstream comment:

Date: Sun, 11 Nov 2007 14:21:23 +0800
[PARSER] Removed noexpand/length check on eofmark

On Tue, Oct 30, 2007 at 04:23:35AM +0000, Oleg Verych wrote:
>
> } 8<<""
> ======================

Actually this (the empty delim) only works with dash by accident.
I've tried bash and pdksh and they both terminate on the first
empty line which is what you would expect rather than EOF.  The
real Korn shell does something completely different.

I've fixed this in dash to conform to bash/pdksh.

> In [0] it's stated, that delimiter isn't evaluated (expanded), only
> quoiting must be checked. That if() seems to be completely bogus.

OK I agree.  The reason it was there is because the parser would
have already replaced the dollar sign by an internal representation.

I've fixed it properly with this patch.

Test case:

        cat <<- $a
                OK
        $a

        cat <<- ""
                OK

        echo OK

Old result:

        dash: Syntax error: Illegal eof marker for << redirection
        OK

        echo OK

New result:

        OK
        OK
        OK

function                                             old     new   delta
parsefname                                           227     152     -75
readtoken1                                          2819    2651    -168
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-243)           Total: -243 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c
shell/ash_test/ash-heredoc/heredoc_empty.right [new file with mode: 0644]
shell/ash_test/ash-heredoc/heredoc_empty.tests [new file with mode: 0755]