Bug #61418 [Asn->Csd]: Segmentation foult using FiltesystemIterator & RegexIterator
| From: | cataphract@php.net | Date: | Sun, 18 Mar 2012 15:07:09 +0000 |
| Subject: | Bug #61418 [Asn->Csd]: Segmentation foult using FiltesystemIterator & RegexIterator | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-168581@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: Assigned
+Status: Closed
Type: Bug
Package: SPL related
Operating System: Linux Mint 12
PHP Version: 5.3.10
Assigned To: cataphract
Block user comment: N
Private report: N
Previous Comments:
------------------------------------------------------------------------
[2012-03-18 15:07:08] cataphract@php.net
Automatic comment from SVN on behalf of cataphract
Revision: http://svn.php.net/viewvc/?view=revision&revision=324327
Log: - Fixed bug #61418 (Segmentation fault when DirectoryIterator's or
FilesystemIterator's iterators are requested more than once without
having had its dtor callback called in between).
------------------------------------------------------------------------
[2012-03-17 23:27:20] cataphract@php.net
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.
------------------------------------------------------------------------
[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
------------------------------------------------------------------------
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=61418
--
Edit this bug report at https://bugs.php.net/bug.php?id=61418&edit=1