cvs: php4 /main php_virtual_cwd.c
| From: | Andi Gutmans | Date: | Wed, 28 Jun 2000 17:30:30 +0000 |
| Subject: | cvs: php4 /main php_virtual_cwd.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-532@lists.php.net to get a copy of this message | ||
andi Wed Jun 28 10:30:30 2000 EDT
Modified files:
/php4/main php_virtual_cwd.c
Log:
- Fix problem with VIRTUAL_DIR and relative paths containing ..
Index: php4/main/php_virtual_cwd.c
diff -u php4/main/php_virtual_cwd.c:1.59 php4/main/php_virtual_cwd.c:1.60
--- php4/main/php_virtual_cwd.c:1.59 Tue Jun 27 11:18:18 2000
+++ php4/main/php_virtual_cwd.c Wed Jun 28 10:30:30 2000
@@ -281,9 +281,30 @@
#ifndef ZEND_WIN32
if (strstr(path, "..")) {
/* If .. is found then we need to resolve real path as the .. code doesn't work with
symlinks */
- if (realpath(path, resolved_path)) {
- path = resolved_path;
- path_length = strlen(path);
+ if (IS_ABSOLUTE_PATH(path, path_length)) {
+ if (realpath(path, resolved_path)) {
+ path = resolved_path;
+ path_length = strlen(path);
+ }
+ } else { /* Concat current directory with relative path and then run realpath() on it */
+ char *tmp;
+ char *ptr;
+
+ ptr = tmp = (char *) malloc(state->cwd_length+path_length+sizeof("/"));
+ if (!tmp) {
+ return 1;
+ }
+ memcpy(ptr, state->cwd, state->cwd_length);
+ ptr += state->cwd_length;
+ *ptr++ = DEFAULT_SLASH;
+ memcpy(ptr, path, path_length);
+ ptr += path_length;
+ *ptr = '\0';
+ if (realpath(tmp, resolved_path)) {
+ path = resolved_path;
+ path_length = strlen(path);
+ }
+ free(tmp);
}
}
#endif