ab5602 Tue Oct 9 02:41:14 2007 UTC
Modified files:
/php-src/main fopen_wrappers.c
Log:
Fix for bug 41822. expand_filepath() will now return a relative path under
the specific situation where getcwd() returns NULL and the file is still
readable. As far as I have been able to tell, this fix only applies to the
Solaris OS where files in directories with (--x) cannot getcwd().
http://cvs.php.net/viewvc.cgi/php-src/main/fopen_wrappers.c?r1=1.196&r2=1.197&diff_format=u
Index: php-src/main/fopen_wrappers.c
diff -u php-src/main/fopen_wrappers.c:1.196 php-src/main/fopen_wrappers.c:1.197
--- php-src/main/fopen_wrappers.c:1.196 Thu Jul 19 10:03:17 2007
+++ php-src/main/fopen_wrappers.c Tue Oct 9 02:41:14 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fopen_wrappers.c,v 1.196 2007/07/19 10:03:17 tony2001 Exp $ */
+/* $Id: fopen_wrappers.c,v 1.197 2007/10/09 02:41:14 ab5602 Exp $ */
/* {{{ includes
*/
@@ -577,18 +577,30 @@
{
cwd_state new_state;
char cwd[MAXPATHLEN];
- char *result;
- if (!filepath[0]) {
- return NULL;
- } else if (IS_ABSOLUTE_PATH(filepath, strlen(filepath))) {
- cwd[0] = '\0';
- } else{
- result = VCWD_GETCWD(cwd, MAXPATHLEN);
- if (!result) {
- cwd[0] = '\0';
- }
- }
+ if (!filepath[0]) {
+ return NULL;
+ } else if (IS_ABSOLUTE_PATH(filepath, strlen(filepath))) {
+ cwd[0] = '\0';
+ } else {
+ const char *iam = SG(request_info).path_translated;
+ char *result = VCWD_GETCWD(cwd, MAXPATHLEN);
+ if (!result && (iam != filepath)) {
+ int fdtest = -1;
+ fdtest = VCWD_OPEN(filepath, O_RDONLY);
+ if (fdtest != -1) {
+ /* return a relative file path if for any
reason
+ we cannot cannot getcwd() and the
requested,
+ relatively referenced file is accessible */
+ int copy_len =
strlen(filepath)>MAXPATHLEN-1?MAXPATHLEN-1:strlen(filepath);
+ real_path = estrndup(filepath, copy_len);
+ return real_path;
+ }
+ }
+ else {
+ cwd[0] = '\0';
+ }
+ }
new_state.cwd = strdup(cwd);
new_state.cwd_length = strlen(cwd);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php