[PATCH] Fix section-from-path > 1

Lukas Fleischer cgit at cryptocrack.de
Fri Jun 28 11:06:57 CEST 2013


When having found the first path separator occurrence at position i, we
invoked strchr() on the same position i in subsequent iterations
resulting in the same path separator being returned by strchr() over and
over again. Increase the position by one to skip the occurrence that has
just been found and advance to the next separator.

Reported-by: Konstantin Ryabitsev <mricon at kernel.org>
Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
Completely untested but I think something like this might fix it.

 scan-tree.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/scan-tree.c b/scan-tree.c
index 2684b44..7cd8f08 100644
--- a/scan-tree.c
+++ b/scan-tree.c
@@ -148,14 +148,14 @@ static void add_repo(const char *base, struct strbuf *path, repo_config_fn fn)
 	}
 
 	if (ctx.cfg.section_from_path) {
-		n  = ctx.cfg.section_from_path;
+		n = ctx.cfg.section_from_path;
 		if (n > 0) {
-			slash = rel.buf;
-			while (slash && n && (slash = strchr(slash, '/')))
+			slash = rel.buf - 1;
+			while (slash && n && (slash = strchr(slash + 1, '/')))
 				n--;
 		} else {
 			slash = rel.buf + rel.len;
-			while (slash && n && (slash = xstrrchr(rel.buf, slash, '/')))
+			while (slash && n && (slash = xstrrchr(rel.buf, slash - 1, '/')))
 				n++;
 		}
 		if (slash && !n) {
-- 
1.8.3.1.764.g8b6e9d8



More information about the CGit mailing list