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

 ID:                 48814
 Updated by:         le...@php.net
 Reported by:        dennis at born05 dot nl
 Summary:            Subclass of RecursiveDirectoryIterator segfaults
                     with custom constructor
-Status:             Assigned
+Status:             Closed
 Type:               Bug
 Package:            SPL related
 Operating System:   Fedora Core 6
 PHP Version:        5.2.10, 5.3.0
 Assigned To:        colder
 Block user comment: N
 Private report:     N

 New Comment:

Thank you for your bug report. This issue has already been fixed
in the latest released version of PHP, which you can download at 
http://www.php.net/downloads.php




Previous Comments:
------------------------------------------------------------------------
[2009-07-20 22:01:37] fel...@php.net

HEAD works fine.

5.2 and 5.3 segfaults:

(gdb) bt
#0  0x08412082 in _zval_ptr_dtor (zval_ptr=0xa37dc0f, __zend_filename=0x87bbafc 
"/home/felipe/dev/php5/Zend/zend_variables.c", 
    __zend_lineno=175) at /home/felipe/dev/php5/Zend/zend.h:391
#1  0x08421c68 in _zval_ptr_dtor_wrapper (zval_ptr=0xa37dc10) at 
/home/felipe/dev/php5/Zend/zend_variables.c:175
#2  0x08434493 in zend_hash_destroy (ht=0xa37db58) at 
/home/felipe/dev/php5/Zend/zend_hash.c:526
#3  0x0844d749 in zend_object_std_dtor (object=0xa38460c, tsrm_ls=0xa22d070) at 
/home/felipe/dev/php5/Zend/zend_objects.c:45
#4  0x0827ddff in spl_filesystem_object_free_storage (object=0xa38460c, 
tsrm_ls=0xa22d070) at /home/felipe/dev/php5/ext/spl/spl_directory.c:81
#5  0x08453566 in zend_objects_store_del_ref_by_handle_ex (handle=5, 
handlers=0x87d0e40, tsrm_ls=0xa22d070)
    at /home/felipe/dev/php5/Zend/zend_objects_API.c:220
#6  0x08453138 in zend_objects_store_del_ref (zobject=0xa37d78c, 
tsrm_ls=0xa22d070) at /home/felipe/dev/php5/Zend/zend_objects_API.c:172
#7  0x0842185b in _zval_dtor_func (zvalue=0xa37d78c, __zend_filename=0x87ba958 
"/home/felipe/dev/php5/Zend/zend_execute_API.c", 
    __zend_lineno=435) at /home/felipe/dev/php5/Zend/zend_variables.c:52
---Type <return> to continue, or q <return> to quit---
#8  0x08411d2c in _zval_dtor (zvalue=0xa37d78c, __zend_filename=0x87ba958 
"/home/felipe/dev/php5/Zend/zend_execute_API.c", __zend_lineno=435)
    at /home/felipe/dev/php5/Zend/zend_variables.h:35
#9  0x08412111 in _zval_ptr_dtor (zval_ptr=0xa387cd0, __zend_filename=0x876bf7c 
"/home/felipe/dev/php5/ext/spl/spl_iterators.c", 
    __zend_lineno=352) at /home/felipe/dev/php5/Zend/zend_execute_API.c:435
#10 0x0826e5d7 in spl_recursive_it_move_forward_ex (object=0xa37c814, 
zthis=0xa37bf40, tsrm_ls=0xa22d070)
    at /home/felipe/dev/php5/ext/spl/spl_iterators.c:352
#11 0x0826e888 in spl_recursive_it_move_forward (iter=0xa37d5b4, 
tsrm_ls=0xa22d070) at /home/felipe/dev/php5/ext/spl/spl_iterators.c:387
#12 0x0847bba4 in ZEND_FE_FETCH_SPEC_VAR_HANDLER (execute_data=0xa3ab6a4, 
tsrm_ls=0xa22d070)
    at /home/felipe/dev/php5/Zend/zend_vm_execute.h:8894
#13 0x0845647b in execute (op_array=0xa37f748, tsrm_ls=0xa22d070) at 
/home/felipe/dev/php5/Zend/zend_vm_execute.h:104
#14 0x084252c2 in zend_execute_scripts (type=8, tsrm_ls=0xa22d070, retval=0x0, 
file_count=3) at /home/felipe/dev/php5/Zend/zend.c:1188


------------------------------------------------------------------------
[2009-07-06 12:00:59] dennis at born05 dot nl

Applies for 5.2.10 AND 5.3.0

------------------------------------------------------------------------
[2009-07-06 11:59:38] dennis at born05 dot nl

Description:
------------
When you subclass RecursiveDirectoryIterator and override the 
constructor with enhanced functionality it makes PHP segfault.


I have tested this on 5.2.10 and 5.3.0, both display similar (but not 
equal) behaviour, the output is somewhat different, but both versions 
segfault.

Reproduce code:
---------------
<?php
class MyRDI extends RecursiveDirectoryIterator
{
        public $base_path;
        
        public function __construct($path, $flags = 0)
        {
                $this->base_path = $path;
                parent::__construct($path, $flags);
        }
}

$iterator = new RecursiveIteratorIterator(new MyRDI('/path/to/dir/hierarchy'));
        
foreach($iterator as $entry)
{
        echo $entry->getFilename()."\n";
}
?>

Expected result:
----------------
See a list of all the filenames

Actual result:
--------------
PHP segfaults


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



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

Reply via email to