diff options
| author | Robert Thompson <ab5602@php.net> | 2007-10-08 02:49:26 +0000 |
|---|---|---|
| committer | Robert Thompson <ab5602@php.net> | 2007-10-08 02:49:26 +0000 |
| commit | 477e2b315b7ed884bcfc4981df65ef1ad9bf06db (patch) | |
| tree | db7c8a16c75d8f768c3cc5936ff62370c1e26697 /main | |
| parent | 98599a1c234890811df1bf9ebd0b11313314dcef (diff) | |
| download | php-git-477e2b315b7ed884bcfc4981df65ef1ad9bf06db.tar.gz | |
Fix for bug 41822 and 41899. 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().
Diffstat (limited to 'main')
| -rw-r--r-- | main/fopen_wrappers.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index 63f608fb58..31c983331b 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -604,18 +604,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) { + } 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); |
