1
0
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:
Robert Thompson
2007-10-09 02:41:14 +00:00
parent 3c9399920f
commit d5192b04a4

View File

@@ -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);