Fix bug #53226 (file_exists fails on big filenames).

This commit is contained in:
Adam Harvey 2010-11-05 05:28:07 +00:00
parent 8365739663
commit 7f0d3f7d70
2 changed files with 39 additions and 0 deletions

View File

@ -291,6 +291,14 @@ PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC)
char *ptr; char *ptr;
char *end; char *end;
/* Check if the path is too long so we can give a more useful error
* message. */
if (strlen(path) > (MAXPATHLEN - 1)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "File name is longer than the maximum allowed path length on this platform (%d): %s", MAXPATHLEN, path);
errno = EINVAL;
return -1;
}
pathbuf = estrdup(PG(open_basedir)); pathbuf = estrdup(PG(open_basedir));
ptr = pathbuf; ptr = pathbuf;

View File

@ -0,0 +1,31 @@
--TEST--
Bug #53226 (file_exists fails on big filenames)
--INI--
open_basedir=.
--FILE--
<?php
require_once "open_basedir.inc";
create_directories();
var_dump(file_exists('./test/ok/ok.txt'));
var_dump(file_exists('./test/foo'));
// Picked an arbitrarily large number that should be beyond PATH_MAX on every
// OS I know about.
$file = str_repeat('x', 40000);
var_dump(file_exists("./test/$file"));
?>
--CLEAN--
<?php
require_once "open_basedir.inc";
delete_directories();
?>
--EXPECTF--
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
Warning: file_exists(): File name is longer than the maximum allowed path length on this platform (%d): %s in %s on line %d
bool(false)