|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/port/path.c,v 1.52 2005/08/11 03:53:25 momjian Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/port/path.c,v 1.53 2005/08/12 02:48:37 momjian Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -284,7 +284,13 @@ canonicalize_path(char *path)
|
284 | 284 |
|
285 | 285 | if (len>2&&strcmp(path+len-2,"/.")==0)
|
286 | 286 | trim_directory(path);
|
287 |
| -/* We can only deal with "/usr/local/..", not "/usr/local/../.." */ |
| 287 | +/* |
| 288 | + *Process only a single trailing "..", and only if ".." does |
| 289 | + *not preceed it. |
| 290 | + *So, we only deal with "/usr/local/..", not with "/usr/local/../..". |
| 291 | + *We don't handle the even more complex cases, like |
| 292 | + *"usr/local/../../.." and "usr/local/../bin/../..". |
| 293 | + */ |
288 | 294 | elseif (len>3&&strcmp(path+len-3,"/..")==0&&
|
289 | 295 | (len!=5||strcmp(path,"../..")!=0)&&
|
290 | 296 | (len<6||strcmp(path+len-6,"/../..")!=0))
|
|