diff options
| -rwxr-xr-x | main/streams.c | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/main/streams.c b/main/streams.c index f6190498c4..6d8d02d989 100755 --- a/main/streams.c +++ b/main/streams.c @@ -1579,6 +1579,32 @@ PHPAPI php_stream *_php_stream_fopen_with_path(char *filename, char *mode, char  		return php_stream_fopen_rel(filename, mode, opened_path, options);  	} +	 +#ifdef PHP_WIN32 +	if (IS_SLASH(filename[0])) { +		int cwd_len; +		char *cwd; +		cwd = virtual_getcwd_ex(&cwd_len TSRMLS_CC); +		/* getcwd() will return always return [DRIVE_LETTER]:/) on windows. */ +		*(cwd+3) = '\0'; +	 +		snprintf(trypath, MAXPATHLEN, "%s%s", cwd, filename); +		 +		free(cwd); +		 +		if (php_check_open_basedir(trypath TSRMLS_CC)) { +			return NULL; +		} +		if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC)) == 0) { +			return php_stream_fopen_rel(trypath, mode, opened_path, options); +		}	 +		if (PG(safe_mode) && (!php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM))) { +			return NULL; +		} +		 +		return php_stream_fopen_rel(trypath, mode, opened_path, options); +	} +#endif  	if (!path || (path && !*path)) {  | 
