Bug #77263 [Opn->Ver]: Segfault when using 2 RecursiveFilterIterator

From: Date: Sat, 08 Dec 2018 14:24:48 +0000
Subject: Bug #77263 [Opn->Ver]: Segfault when using 2 RecursiveFilterIterator
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-218340@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77263&edit=1

 ID:                 77263
 Updated by:         cmb@php.net
 Reported by:        yani at iliev dot me
 Summary:            Segfault when using 2 RecursiveFilterIterator
-Status:             Open
+Status:             Verified
 Type:               Bug
 Package:            Reproducible crash
 Operating System:   Any
 PHP Version:        7.3.0
-Assigned To:        
+Assigned To:        dmitry
 Block user comment: N
 Private report:     N

 New Comment:

Apparently, this regression has been introduced by commit
40551e0[1].  Dmitry, could you please have a look at this issue?

[1] <http://git.php.net/?p=php-src.git;a=commit;h=40551e0255b3ad773dcc058305fa5a61c6ae7f39>


Previous Comments:
------------------------------------------------------------------------
[2018-12-07 16:48:43] yani at iliev dot me

PHP Version should be 7.3.0

------------------------------------------------------------------------
[2018-12-07 16:34:18] yani at iliev dot me

Fixed a typo in the title

------------------------------------------------------------------------
[2018-12-07 16:03:10] yani at iliev dot me

Description:
------------
When two RecursiveFilterIterator are added to RecursiveDirectoryIterator it results in a segfault.
The same code works in PHP 7.2.x and below

Test script:
---------------
<?php

mkdir("/tmp/dir");
mkdir("/tmp/dir/subdir");
touch("/tmp/dir/file1");
touch("/tmp/dir/subdir/file2");

class Filter1 extends RecursiveFilterIterator {
    public function accept() { return $this->getInnerIterator()->getSubPathname() !=
''; }
}

class Filter2 extends RecursiveFilterIterator {
    public function accept() { return $this->getInnerIterator()->getSubPathname() != '
'; }
}

$iterator = new RecursiveDirectoryIterator( '/tmp', FilesystemIterator::SKIP_DOTS );

$iterator = new Filter1( $iterator );

$iterator = new Filter2( $iterator );

$iterator = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::LEAVES_ONLY,
RecursiveIteratorIterator::CATCH_GET_CHILD );

foreach ( $iterator as $item ) {
    echo  $iterator->getSubPathName() . PHP_EOL;
}

Expected result:
----------------
dir/file1
dir/subdir/file2

Actual result:
--------------
dir/file1

Process exited with code 139.


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



--
Edit this bug report at https://bugs.php.net/bug.php?id=77263&edit=1


Thread (5 messages)

« previous php.bugs (#218340) next »