From 170f44d00498bdb0e916e7efdc19a8d3489a381c Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Tue, 25 Sep 2007 10:54:13 +0800 Subject: [EXPAND] Do not expand tilde in parameter expansion within quotes Previously code was added so that tilde expansion was carried out parameter expansions within double quotes. This change was made with reference the behaviour of bash at the time. Bash has since be fixed so that this behaviour no longer occurs which is in line with most other POSIX shells. So this patch removes that behaviour in dash as well. Test case: unset a echo "${a:-~root}" Old result: /root New result: ~root --- src/expand.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'src/expand.c') diff --git a/src/expand.c b/src/expand.c index 1443c14..c9f09ff 100644 --- a/src/expand.c +++ b/src/expand.c @@ -278,7 +278,7 @@ argstr(char *p, int flag) const char *reject = spclchars; int c; int quotes = flag & QUOTES_ESC; - int breakall = flag & EXP_WORD; + int breakall = (flag & (EXP_WORD | EXP_QUOTED)) == EXP_WORD; int inquotes; size_t length; int startloc; @@ -296,8 +296,6 @@ argstr(char *p, int flag) flag &= ~EXP_TILDE; tilde: q = p; - if (*q == (char)CTLESC && (flag & EXP_QWORD)) - q++; if (*q == '~') p = exptilde(p, q, flag); } @@ -780,10 +778,8 @@ again: if (subtype == VSMINUS) { vsplus: if (varlen < 0) { - argstr( - p, flag | EXP_TILDE | - (quoted ? EXP_QWORD : EXP_WORD) - ); + argstr(p, flag | EXP_TILDE | EXP_WORD | + (quoted ? EXP_QUOTED : 0)); goto end; } if (easy) -- cgit 1.4.1