mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
MFH: fix #41518 (file_exists() warns of open_basedir restriction on non-existent file)
This commit is contained in:
parent
6d76fc2834
commit
8e3eee385e
2
NEWS
2
NEWS
@ -1,6 +1,8 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? 2007, PHP 5.2.4
|
||||
- Fixed bug #41518 (file_exists() warns of open_basedir restriction on
|
||||
non-existent file). (Tony)
|
||||
- Fixed bug #39330 (apache2handler does not call shutdown actions before
|
||||
apache child die). (isk at ecommerce dot com, Gopal, Tony)
|
||||
|
||||
|
28
ext/standard/tests/general_functions/bug41518.phpt
Normal file
28
ext/standard/tests/general_functions/bug41518.phpt
Normal file
@ -0,0 +1,28 @@
|
||||
--TEST--
|
||||
Bug #41518 (file_exists() warns of open_basedir restriction on non-existent file)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
/* let's use /tmp here */
|
||||
$tmp_dir = "/tmp";
|
||||
if (!is_dir($tmp_dir) || realpath($tmp_dir) !== $tmp_dir) {
|
||||
die("skip");
|
||||
}
|
||||
?>
|
||||
--INI--
|
||||
open_basedir=/tmp/
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$tmp_dir = "/tmp";
|
||||
$tmp_file = $tmp_dir."/bug41418.tmp";
|
||||
|
||||
touch($tmp_file);
|
||||
var_dump(file_exists($tmp_file)); //exists
|
||||
var_dump(file_exists($tmp_file."nosuchfile")); //doesn't exist
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(true)
|
||||
bool(false)
|
||||
Done
|
@ -172,8 +172,8 @@ PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path
|
||||
}
|
||||
}
|
||||
|
||||
if (path_tmp[path_len - 1] == PHP_DIR_SEPARATOR) {
|
||||
resolved_name_len = strlen(resolved_name);
|
||||
if (path_tmp[path_len - 1] == PHP_DIR_SEPARATOR) {
|
||||
if (resolved_name[resolved_name_len - 1] != PHP_DIR_SEPARATOR) {
|
||||
resolved_name[resolved_name_len] = PHP_DIR_SEPARATOR;
|
||||
resolved_name[++resolved_name_len] = '\0';
|
||||
@ -189,6 +189,16 @@ PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path
|
||||
/* File is in the right directory */
|
||||
return 0;
|
||||
} else {
|
||||
/* /openbasedir/ and /openbasedir are the same directory */
|
||||
if (resolved_basedir_len == (resolved_name_len + 1) && resolved_basedir[resolved_basedir_len - 1] == PHP_DIR_SEPARATOR) {
|
||||
#if defined(PHP_WIN32) || defined(NETWARE)
|
||||
if (strncasecmp(resolved_basedir, resolved_name, resolved_name_len) == 0) {
|
||||
#else
|
||||
if (strncmp(resolved_basedir, resolved_name, resolved_name_len) == 0) {
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user