summary refs log tree commit diff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2008-01-01 13:46:01 +1100
committerHerbert Xu <herbert@gondor.apana.org.au>2008-05-02 14:09:17 +0800
commit36f0fa8fcbc8c7b2b194addd29100fb40e73e4e9 (patch)
tree670befb7730b1ac930d02e7f2e3fdaf314ac4bf9
parent[PARSER] Do not show prompts in expandstr (diff)
downloaddash-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>
-rw-r--r--ChangeLog4
-rw-r--r--src/expand.c15
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 <herbert@gondor.apana.org.au>
+
+	* Fix slash treatment in expmeta.
+
 2007-12-27  Herbert Xu <herbert@gondor.apana.org.au>
 
 	* 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++;
t-pink/commit/ui-tree.c?h=1.3.0&id=7105a78b17b118866aee77735e26cffcd1fd08fd&follow=1'>ui-tree: use "sane" isgraph()John Keeping 2015-08-13cgit.h: move stdbool.h from ui-shared.hJohn Keeping 2015-08-13cache.c: fix header orderJohn Keeping 2015-08-13configfile.c: don't include system headers directlyJohn Keeping 2015-08-13Remove redundant includesJohn Keeping 2015-08-13Makefile: include Git's config.mak.unameJohn Keeping 2015-08-13tests: allow shell to be overriddenJohn Keeping 2015-08-13redirect: cleanlinessJason A. Donenfeld 2015-08-13redirect: be more careful for different cgi setupsJason A. Donenfeld 2015-08-12ui-log: fix double countingJohn Keeping 2015-08-12log: allow users to follow a fileJohn Keeping 2015-08-12shared: make cgit_diff_tree_cb publicJohn Keeping 2015-08-12t0110: Chain together using &&Jason A. Donenfeld 2015-08-12about: always ensure page has a trailing slashJason A. Donenfeld 2015-08-12filters: apply HTML escapingLazaros Koromilas 2015-08-12git: update to v2.5.0Christian Hesse 2015-08-12Fix processing of repo.hide and repo.ignoreDaniel Reichelt