Fixed alloc_sanitize_path()'s handling of a rootdir == "/" (the old
authorWayne Davison <wayned@samba.org>
Sat, 17 Apr 2004 17:06:03 +0000 (17:06 +0000)
committerWayne Davison <wayned@samba.org>
Sat, 17 Apr 2004 17:06:03 +0000 (17:06 +0000)
code would generate a string that started with "//" instead of "/").

util.c

diff --git a/util.c b/util.c
index 5c55ce4..5c3f26c 100644 (file)
--- a/util.c
+++ b/util.c
@@ -786,9 +786,11 @@ char *alloc_sanitize_path(const char *path, const char *rootdir)
        char *buf;
        int rlen, plen = strlen(path);
 
-       if (*path == '/' && rootdir)
+       if (*path == '/' && rootdir) {
                rlen = strlen(rootdir);
-       else
+               if (rlen == 1)
+                       path++;
+       } else
                rlen = 0;
        if (!(buf = new_array(char, rlen + plen + 1)))
                out_of_memory("alloc_sanitize_path");
@@ -796,11 +798,15 @@ char *alloc_sanitize_path(const char *path, const char *rootdir)
                memcpy(buf, rootdir, rlen);
        memcpy(buf + rlen, path, plen + 1);
 
-       if (rlen)
+       if (rlen > 1)
                rlen++;
        sanitize_path(buf + rlen, NULL);
-       if (rlen && buf[rlen] == '.' && buf[rlen+1] == '\0')
-               buf[rlen-1] = '\0';
+       if (rlen && buf[rlen] == '.' && buf[rlen+1] == '\0') {
+               if (rlen > 1)
+                       rlen--;
+               buf[rlen] = '\0';
+       }
+       fprintf(stderr, "p:`%s'\n", buf);
 
        return buf;
 }