Document why we only handle trailing "..".
authorBruce Momjian <bruce@momjian.us>
Fri, 12 Aug 2005 02:48:37 +0000 (02:48 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 12 Aug 2005 02:48:37 +0000 (02:48 +0000)
src/port/path.c

index 225ebdf43d08bdb492385910dd597f211abbd24f..0890c95aa1aaa4df0319fa4e91f424167d7b3138 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/port/path.c,v 1.52 2005/08/11 03:53:25 momjian Exp $
+ *       $PostgreSQL: pgsql/src/port/path.c,v 1.53 2005/08/12 02:48:37 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -284,7 +284,13 @@ canonicalize_path(char *path)
 
                if (len > 2 && strcmp(path + len - 2, "/.") == 0)
                        trim_directory(path);
-               /* We can only deal with "/usr/local/..", not "/usr/local/../.." */
+               /*
+                *      Process only a single trailing "..", and only if ".." does
+                *      not preceed it.
+                *      So, we only deal with "/usr/local/..", not with "/usr/local/../..".
+                *      We don't handle the even more complex cases, like
+                *      "usr/local/../../.." and "usr/local/../bin/../..".
+                */
                else if (len > 3 && strcmp(path + len - 3, "/..") == 0 &&
                                 (len != 5 || strcmp(path, "../..") != 0) &&
                                 (len < 6 || strcmp(path + len - 6, "/../..") != 0))