Skip to content

Commit

Permalink
MFH: fix #41518 (file_exists() warns of open_basedir restriction on n…
Browse files Browse the repository at this point in the history
…on-existent file)
  • Loading branch information
tony2001 committed Jun 1, 2007
1 parent 6d76fc2 commit 8e3eee3
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
2 changes: 2 additions & 0 deletions 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)

Expand Down
28 changes: 28 additions & 0 deletions ext/standard/tests/general_functions/bug41518.phpt
@@ -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
12 changes: 11 additions & 1 deletion main/fopen_wrappers.c
Expand Up @@ -172,8 +172,8 @@ PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path
}
}

resolved_name_len = strlen(resolved_name);
if (path_tmp[path_len - 1] == PHP_DIR_SEPARATOR) {
resolved_name_len = strlen(resolved_name);
if (resolved_name[resolved_name_len - 1] != PHP_DIR_SEPARATOR) {
resolved_name[resolved_name_len] = PHP_DIR_SEPARATOR;
resolved_name[++resolved_name_len] = '\0';
Expand All @@ -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 {
Expand Down

0 comments on commit 8e3eee3

Please sign in to comment.