Edit report at https://bugs.php.net/bug.php?id=47358&edit=1
ID: 47358 Updated by: a...@php.net Reported by: php at guggemand dot dk Summary: glob returns error, should be empty array() Status: Re-Opened Type: Bug Package: Safe Mode/open_basedir Operating System: FreeBSD 7.1 PHP Version: 5.2.9RC1 Assigned To: pajoye Block user comment: N Private report: N New Comment: I can see the patch commited at 2013-01-08 http://git.php.net/?p=php-src.git;a=history;f=ext/standard/dir.c;hb=HEAD However the 5.5 branch doesn't have it, it seems to be created before 2013-01-08 http://git.php.net/?p=php-src.git;a=history;f=ext/standard/dir.c;hb=refs/heads/PHP-5.5 This way it works in PHP <= 5.5 is returning false or array() on a nonexistent path depending on whether basedir was set or not. In master where the patch is present it returns an empty array disregarding openbasedir setting on linux, but still has difference on windows when the path contains '*' or '?'. I've pushed the test splitted in 5.4/5.5 indicating the 'is state' http://git.php.net/?p=php- src.git;a=blob_plain;f=ext/standard/tests/file/glob_variation3.phpt;hb=refs/heads/PHP-5.4 and into master: http://git.php.net/?p=php- src.git;a=blob_plain;f=ext/standard/tests/file/glob_variation3.phpt;hb=refs/heads/master On master it'll fail on windows because of the platform difference in virtual_file_ex() mentioned above. Previous Comments: ------------------------------------------------------------------------ [2013-08-19 08:28:10] a...@php.net Here's a testcase i wrote to ensure it does right across platforms --TEST-- Test glob() function: ensure no platform difference --FILE-- <?php $path = dirname(__FILE__); ini_set('open_basedir', NULL); var_dump(glob("$path/*.none")); ini_set('open_basedir', $path); var_dump(glob("$path/*.none")); ?> ==DONE== --EXPECT-- array(0) { } array(0) { } ==DONE== ------------------------------------------------------------------------ [2013-08-19 08:24:39] a...@php.net There are some cases with the platform difference windows x64\Debug_TS\php -n -d open_basedir=C:\php-sdk\phpmaster\vc11\x64\php-src -r "var_dump(glob('C:\php-sdk\phpmaster\vc11\x64\php-src\*.none'));" bool(false) x64\Debug_TS\php -n -r "var_dump(glob('C:\php-sdk\phpmaster\vc11\x64\php-src\*.none'));" array(0) { } linux sapi/cli/php -n -d open_basedir=/home/anatol/dws/src/php-master-ts -r 'var_dump(glob("/home/anatol/dws/src/php-master-ts/*.none"));' array(0) { } sapi/cli/php -n -r 'var_dump(glob("/home/anatol/dws/src/php-master-ts/*.none"));' array(0) { } The cause of this platform difference is that here http://lxr.php.net/xref/PHP_TRUNK/ext/standard/dir.c#495 php_check_open_basedir_ex() subsequently calls virtual_file_ex() http://lxr.php.net/xref/PHP_TRUNK/TSRM/tsrm_virtual_cwd.c#1241 and if the pattern contains '*' or '?', php_check_open_basedir_ex() will return -1 on windows. I've discovered while testing this PR https://github.com/php/php-src/pull/398 which had the same issue. ------------------------------------------------------------------------ [2013-01-08 14:21:58] paj...@php.net Automatic comment on behalf of pierre....@gmail.com Revision: http://git.php.net/?p=php-src.git;a=commit;h=50ceeb9f750cecedc483ffc3d3e65a3324e21866 Log: - fix bug #47358, glob returns error, should be empty array() ------------------------------------------------------------------------ [2013-01-08 14:21:57] paj...@php.net Automatic comment on behalf of pierre....@gmail.com Revision: http://git.php.net/?p=php-src.git;a=commit;h=2fb7cd30c59345838588ba89ad8b05cc4c34d6dd Log: - fix bug #47358, glob returns error, should be empty array() ------------------------------------------------------------------------ [2012-11-09 14:09:05] manuel-php at mausz dot at Hi Pierre! Please merge your patch asap to php. It works as expected and will fix the following inconsistency: $ php -dopen_basedir=/ -r 'var_dump(glob("/does/not/exist"));' bool(false) $ php -r 'var_dump(glob("/does/not/exist"));' array(0) { } Something to consider is updating the docs to mention returning false if open_basedir restriction is in effect. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=47358 -- Edit this bug report at https://bugs.php.net/bug.php?id=47358&edit=1