Skip to content

Commit 31833e6

Browse files
authored
Expand file path in file stat only for wrapper path (php#12068)
1 parent 1754794 commit 31833e6

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

ext/standard/filestat.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -727,28 +727,31 @@ PHPAPI void php_stat(zend_string *filename, int type, zval *return_value)
727727

728728
if (wrapper == &php_plain_files_wrapper) {
729729
char realpath[MAXPATHLEN];
730-
if (expand_filepath(local, realpath) == NULL) {
731-
strlcpy(realpath, local, sizeof(realpath));
730+
const char *file_path_to_check;
731+
if (strstr(local, "://") == NULL || expand_filepath(local, realpath) == NULL) {
732+
file_path_to_check = local;
733+
} else {
734+
file_path_to_check = realpath;
732735
}
733736
switch (type) {
734737
#ifdef F_OK
735738
case FS_EXISTS:
736-
RETURN_BOOL(VCWD_ACCESS(realpath, F_OK) == 0);
739+
RETURN_BOOL(VCWD_ACCESS(file_path_to_check, F_OK) == 0);
737740
break;
738741
#endif
739742
#ifdef W_OK
740743
case FS_IS_W:
741-
RETURN_BOOL(VCWD_ACCESS(realpath, W_OK) == 0);
744+
RETURN_BOOL(VCWD_ACCESS(file_path_to_check, W_OK) == 0);
742745
break;
743746
#endif
744747
#ifdef R_OK
745748
case FS_IS_R:
746-
RETURN_BOOL(VCWD_ACCESS(realpath, R_OK) == 0);
749+
RETURN_BOOL(VCWD_ACCESS(file_path_to_check, R_OK) == 0);
747750
break;
748751
#endif
749752
#ifdef X_OK
750753
case FS_IS_X:
751-
RETURN_BOOL(VCWD_ACCESS(realpath, X_OK) == 0);
754+
RETURN_BOOL(VCWD_ACCESS(file_path_to_check, X_OK) == 0);
752755
break;
753756
#endif
754757
}

0 commit comments

Comments
 (0)