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 +Status: Closed 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: fixed with f4df40108be641a4167f6f6c1c3989958dda438a Previous Comments: ------------------------------------------------------------------------ [2013-08-19 09:36:38] a...@php.net 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. ------------------------------------------------------------------------ [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() ------------------------------------------------------------------------ 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