summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Thompson <ab5602@php.net>2007-10-08 02:49:26 +0000
committerRobert Thompson <ab5602@php.net>2007-10-08 02:49:26 +0000
commit477e2b315b7ed884bcfc4981df65ef1ad9bf06db (patch)
treedb7c8a16c75d8f768c3cc5936ff62370c1e26697
parent98599a1c234890811df1bf9ebd0b11313314dcef (diff)
downloadphp-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().
-rw-r--r--main/fopen_wrappers.c22
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);