diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2008-01-01 13:46:01 +1100 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2008-05-02 14:09:17 +0800 |
commit | 36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9 (patch) | |
tree | 670befb7730b1ac930d02e7f2e3fdaf314ac4bf9 /src | |
parent | [PARSER] Do not show prompts in expandstr (diff) | |
download | dash-36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9.tar.gz dash-36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9.zip |
[EXPAND] Fix slash treatment in expmeta
The change [EXPAND] Do not quote back slashes in parameter expansions outside quotes triggered a latent bug in expmeta where the forward slashes when preceded by a blackslash weren't recognised as directory separators. This was hidden because a work-around was put in place for glob(3) which meant that we never had any backslashes immediately before forward slashes. This patch fixes the metaflag loop to recognise forward slashes even when they follow a backslash. Thanks to Daniel Hahler for reporting this problem. Test case: echo "/"root* Old result: /root* New result: /root Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src')
-rw-r--r-- | src/expand.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/expand.c b/src/expand.c index f3d63c4..5986236 100644 --- a/src/expand.c +++ b/src/expand.c @@ -1287,15 +1287,16 @@ expmeta(char *enddir, char *name) break; } } - } else if (*p == '\\') - p++; - else if (*p == '/') { - if (metaflag) - goto out; - start = p + 1; + } else { + if (*p == '\\') + p++; + if (*p == '/') { + if (metaflag) + break; + start = p + 1; + } } } -out: if (metaflag == 0) { /* we've reached the end of the file name */ if (enddir != expdir) metaflag++; |