From: Robert Thompson Date: Tue, 9 Oct 2007 02:41:14 +0000 (+0000) Subject: Fix for bug 41822. expand_filepath() will now return a relative path under the speci... X-Git-Tag: RELEASE_2_0_0a1~1629 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5192b04a45ff2200e8acb1293fc03ff2e4841fc;p=php 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(). --- diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index bcff191d77..ded6a54052 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -577,18 +577,30 @@ PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC) { 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);