canonicalize-lgpl: fix // handling
authorEric Blake <eblake@redhat.com>
Sat, 4 Feb 2012 17:03:29 +0000 (10:03 -0700)
committerEric Blake <eblake@redhat.com>
Sat, 4 Feb 2012 17:03:29 +0000 (10:03 -0700)
Same as the previous patch, for the lgpl version.

* lib/canonicalize-lgpl.c (__realpath): Don't convert /// to //.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
lib/canonicalize-lgpl.c

index a9aa40a..cbd8637 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2012-02-04  Eric Blake  <eblake@redhat.com>
 
+       canonicalize-lgpl: fix // handling
+       * lib/canonicalize-lgpl.c (__realpath): Don't convert /// to //.
+
        canonicalize: fix // handling
        * lib/canonicalize.c (canonicalize_filename_mode): Don't convert
        /// to //, since only // is special.
index 2fd79dc..a61bef9 100644 (file)
@@ -156,7 +156,7 @@ __realpath (const char *name, char *resolved)
     {
       rpath[0] = '/';
       dest = rpath + 1;
-      if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/')
+      if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/' && name[2] != '/')
         *dest++ = '/';
     }
 
@@ -187,7 +187,7 @@ __realpath (const char *name, char *resolved)
           if (dest > rpath + 1)
             while ((--dest)[-1] != '/');
           if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1
-              && *dest == '/')
+              && *dest == '/' && dest[1] != '/')
             dest++;
         }
       else
@@ -298,7 +298,8 @@ __realpath (const char *name, char *resolved)
               if (buf[0] == '/')
                 {
                   dest = rpath + 1;     /* It's an absolute symlink */
-                  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && buf[1] == '/')
+                  if (DOUBLE_SLASH_IS_DISTINCT_ROOT
+                      && buf[1] == '/' && buf[2] != '/')
                     *dest++ = '/';
                 }
               else
@@ -308,7 +309,7 @@ __realpath (const char *name, char *resolved)
                   if (dest > rpath + 1)
                     while ((--dest)[-1] != '/');
                   if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1
-                      && *dest == '/')
+                      && *dest == '/' && dest[1] != '/')
                     dest++;
                 }
             }
@@ -321,7 +322,8 @@ __realpath (const char *name, char *resolved)
     }
   if (dest > rpath + 1 && dest[-1] == '/')
     --dest;
-  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 && *dest == '/')
+  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1
+      && *dest == '/' && dest[1] != '/')
     dest++;
   *dest = '\0';