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:

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==


Previous Comments:
------------------------------------------------------------------------
[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.

------------------------------------------------------------------------
[2011-10-09 17:08:22] paj...@php.net

The following patch has been added/updated:

Patch Name: open_basedir_error_fix
Revision:   1318180102
URL:        
https://bugs.php.net/patch-display.php?bug=47358&patch=open_basedir_error_fix&revision=1318180102

------------------------------------------------------------------------


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