process the "./" in file paths correctly (rhbz#491388)
authorJindrich Novy <jnovy@redhat.com>
Wed, 25 Mar 2009 16:28:24 +0000 (17:28 +0100)
committerJindrich Novy <jnovy@redhat.com>
Wed, 25 Mar 2009 16:28:55 +0000 (17:28 +0100)
rpmio/rpmfileutil.c

index 92685bc..060d0c1 100644 (file)
@@ -426,10 +426,18 @@ char *rpmCleanPath(char * path)
            if (begin && s[1] == '\0') {
                break;
            }
-           /* Trim embedded ./ , trailing /. */
-           if ((t[-1] == '/' && s[1] == '\0') || (t > path && t[-1] == '/' && s[1] == '/')) {
-               s++;
-               continue;
+           /* Handle the ./ cases */
+           if (t > path && t[-1] == '/') {
+               /* Trim embedded ./ */
+               if (s[1] == '/') {
+                   s+=2;
+                   continue;
+               }
+               /* Trim trailing /. */
+               if (s[1] == '\0') {
+                   s++;
+                   continue;
+               }
            }
            /* Trim embedded /../ and trailing /.. */
            if (!begin && t > path && t[-1] == '/' && s[1] == '.' && (s[2] == '/' || s[2] == '\0')) {