mirror of
https://github.com/php/php-src.git
synced 2026-03-29 03:32:20 +02:00
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().
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user