ash: expand: Fix ghost fields with unquoted $@/$*
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 5 Aug 2018 12:29:58 +0000 (14:29 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 5 Aug 2018 12:29:58 +0000 (14:29 +0200)
commit440da97ed79841b55f0b61e4108a336b61642bff
tree9cb31a0c1dabd368d8451d92be5506c15a81c8c5
parent67dae152f4bf5456e4ea7950f4b55356aa37ec6c
ash: expand: Fix ghost fields with unquoted $@/$*

Upstream commit:

    Date: Fri, 23 Mar 2018 18:58:47 +0800
    expand: Fix ghost fields with unquoted $@/$*

    You're right.  The proper fix to this is to ensure that nulonly
    is not set in varvalue for $*.  It should only be set for $@ when
    it's inside double quotes.

    In fact there is another bug while we're playing with $@/$*.
    When IFS is set to a non-whitespace character such as :, $*
    outside quotes won't remove empty fields as it should.

    This patch fixes both problems.

Reported-by: Martijn Dekker <martijn@inlv.org>
Suggested-by: Harald van Dijk <harald@gigawatt.nl>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
function                                             old     new   delta
argstr                                              1111    1113      +2
evalvar                                              571     569      -2
varvalue                                             579     576      -3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 2/-5)               Total: -3 bytes

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