[klibc] [klibc:update-dash] expand: Fixed "$@" expansion when EXP_FULL is false
klibc-bot for Herbert Xu
herbert at gondor.apana.org.au
Thu Jan 24 19:15:33 PST 2019
Commit-ID: 77604985dadef38bdaf251e3898a0b2ef33ea08e
Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=77604985dadef38bdaf251e3898a0b2ef33ea08e
Author: Herbert Xu <herbert at gondor.apana.org.au>
AuthorDate: Thu, 1 Jan 2015 07:53:10 +1100
Committer: Ben Hutchings <ben at decadent.org.uk>
CommitDate: Fri, 25 Jan 2019 02:57:21 +0000
[klibc] expand: Fixed "$@" expansion when EXP_FULL is false
The commit 3c06acdac0b1ba0e0acdda513a57ee6e31385dce ([EXPAND]
Split unquoted $@/$* correctly when IFS is set but empty) broke
the case where $@ is in quotes and EXP_FULL is false.
In that case we should still emit IFS as field splitting is not
performed.
Reported-by: Juergen Daubert <jue at jue.li>
Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>
Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
---
usr/dash/expand.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/usr/dash/expand.c b/usr/dash/expand.c
index a2f99f14..c04ff6e1 100644
--- a/usr/dash/expand.c
+++ b/usr/dash/expand.c
@@ -901,6 +901,7 @@ varvalue(char *name, int varflags, int flags, int *quotedp)
int quotes = (discard ? 0 : (flags & QUOTES_ESC)) | QUOTES_KEEPNUL;
ssize_t len = 0;
+ sep = (flags & EXP_FULL) << CHAR_BIT;
syntax = quoted ? DQSYNTAX : BASESYNTAX;
switch (*name) {
@@ -931,16 +932,14 @@ numvar:
expdest = p;
break;
case '@':
- sep = 0;
- if (quoted)
+ if (quoted && sep)
goto param;
/* fall through */
case '*':
- sep = ifsset() ? ifsval()[0] : ' ';
- if (!quoted) {
+ if (quoted)
+ sep = 0;
+ sep |= ifsset() ? ifsval()[0] : ' ';
param:
- sep |= (flags & EXP_FULL) << CHAR_BIT;
- }
sepc = sep;
*quotedp = !sepc;
if (!(ap = shellparam.p))
More information about the klibc
mailing list