From e012b94f21da5dcf2043b3dc967e4723c7ba4b35 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 7 Aug 2004 20:56:41 +0000 Subject: [PATCH] Fixed a bug in clean_fname() that could sometimes leave a "dir/.." sequence uncollapsed. --- util.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/util.c b/util.c index a8787203..28a00ef8 100644 --- a/util.c +++ b/util.c @@ -652,7 +652,7 @@ size_t stringjoin(char *dest, size_t destsize, ...) unsigned int clean_fname(char *name) { - char *limit = name, *t = name, *f = name; + char *limit = name - 1, *t = name, *f = name; int anchored; if (!name) @@ -669,7 +669,7 @@ unsigned int clean_fname(char *name) if (*f == '.') { /* discard "." dirs (but NOT a trailing '.'!) */ if (f[1] == '/') { - f++; /* not += 2! */ + f += 2; continue; } /* collapse ".." dirs */ @@ -680,7 +680,7 @@ unsigned int clean_fname(char *name) continue; } while (s > limit && *--s != '/') {} - if (s != t - 1 && *s == '/') { + if (s != t - 1 && (s < name || *s == '/')) { t = s + 1; f += 2; continue; -- 2.34.1