Bug #61418 [Opn->Ver]: Segmentation foult using FiltesystemIterator & RegexIterator
| From: | cataphract@php.net | Date: | Sat, 17 Mar 2012 23:27:20 +0000 |
| Subject: | Bug #61418 [Opn->Ver]: Segmentation foult using FiltesystemIterator & RegexIterator | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-168579@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=61418&edit=1
ID: 61418
Updated by: cataphract@php.net
Reported by: melkorm at gmail dot com
Summary: Segmentation foult using FiltesystemIterator &
RegexIterator
-Status: Open
+Status: Verified
Type: Bug
Package: SPL related
Operating System: Linux Mint 12
PHP Version: 5.3.10
Block user comment: N
Private report: N
New Comment:
Verified.
The zend_object_iterator_funcs.dtor function (implementation: spl_filesystem_tree_it_dtor) seems
faulty. In the reproduce script here, the zend_object_iterator is requested twice: first by the
RegexIterator constructor, and then by foreach. The zend_object_iterator returned is the same in
both cases -- that owned by the FilesystemIterator and its destructor gets called twice. But
obviously the destructor is not prepared to be called twice as it unconditionally calls
zval_ptr_dtor (for some reason, twice) and zeroes the reference to the owning object.
Previous Comments:
------------------------------------------------------------------------
[2012-03-17 18:52:31] melkorm at gmail dot com
Sorry for this, but I am not used to this bugtrucker yet, anywho proper script should look like
that:
$fileIterator = new FilesystemIterator(__DIR__, FilesystemIterator::KEY_AS_FILENAME);
$regexpIterator = new RegexIterator($fileIterator,
'#.*#',
\RegexIterator::MATCH,
\RegexIterator::USE_KEY
);
foreach ($fileIterator as $key => $file)
{
}
No idea why this
doubled.
------------------------------------------------------------------------
[2012-03-17 18:50:14] melkorm at gmail dot com
There is a typo
------------------------------------------------------------------------
[2012-03-16 17:52:20] melkorm at gmail dot com
It also fails at :
melkorm@bibiop ~ $ php -v
PHP 5.3.6-13ubuntu3.6 with Suhosin-Patch (cli) (built: Feb 11 2012 03:26:01)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
------------------------------------------------------------------------
[2012-03-16 17:47:22] melkorm at gmail dot com
Description:
------------
melkorm@bibiop ~/htdocs/test.dev $ php -v
PHP 5.3.10-1~dotdeb.1 with Suhosin-Patch (cli) (built: Feb 2 2012 23:28:08)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
with Suhosin v0.9.33, Copyright (c) 2007-2012, by SektionEins GmbH
Test script:
---------------
$fileIterator = new FilesystemIterator(__DIR__, FilesystemIterator::KEY_AS_FILENAME);
$regexpIterator = new RegexIterator($fileIterator,
$regexpIterator = new RegexIterator($fileIterator,
'#.*#',
'#.*#',
\RegexIterator::MATCH,
\RegexIterator::MATCH,
\RegexIterator::USE_KEY
\RegexIterator::USE_KEY
);
);
foreach ($fileIterator as $key => $file)
foreach ($fileIterator as $key => $file)
{
}
Actual result:
--------------
Segemntation foult
strace output can be found here : http://pastebin.com/CFV6qepj
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=61418&edit=1