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

Reply via email to