From 36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Tue, 1 Jan 2008 13:46:01 +1100 Subject: [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 --- ChangeLog | 4 ++++ src/expand.c | 15 ++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0030738..4bc9181 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-01-01 Herbert Xu + + * Fix slash treatment in expmeta. + 2007-12-27 Herbert Xu * Add FAKEEOFMARK for expandstr. 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++; -- cgit 1.4.1