mirror of
https://github.com/php/php-src.git
synced 2024-11-25 02:44:58 +08:00
Fix bug #53226 (file_exists fails on big filenames).
This commit is contained in:
parent
8365739663
commit
7f0d3f7d70
@ -291,6 +291,14 @@ PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC)
|
||||
char *ptr;
|
||||
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));
|
||||
|
||||
ptr = pathbuf;
|
||||
|
31
tests/security/bug53226.phpt
Normal file
31
tests/security/bug53226.phpt
Normal 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)
|
Loading…
Reference in New Issue
Block a user