#35567 [Fbk->Opn]: DirectoryIterator segfaults after Notice

From: Date: Tue, 06 Dec 2005 18:27:55 +0000
Subject: #35567 [Fbk->Opn]: DirectoryIterator segfaults after Notice
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-89843@lists.php.net to get a copy of this message
ID: 35567 User updated by: judas dot iscariote at gmail dot com Reported By: judas dot iscariote at gmail dot com -Status: Feedback +Status: Open Bug Type: SPL related Operating System: * PHP Version: 5CVS-2005-12-06 (CVS) Assigned To: helly New Comment: until I come with a test case I got this with valgrind.. ==10761== Process terminating with default action of signal 11 (SIGSEGV) ==10761== Access not within mapped region at address 0xD ==10761== at 0x14393929: zend_std_object_get_class (zend_object_handlers.c:1002) ==10761== by 0x1436F768: convert_to_long_base (zend_operators.c:342) ==10761== by 0x14375466: compare_function (zend_operators.c:1341) ==10761== by 0x14375AB8: is_equal_function (zend_operators.c:1474) ==10761== by 0x142BABC3: ??? (array.c:1248) ==10761== by 0x14397B55: ??? (zend_vm_execute.h:192) ==10761== by 0x1439713F: execute (zend_vm_execute.h:92) ==10761== by 0x1439C008: ??? (zend_vm_execute.h:4334) ==10761== by 0x1439713F: execute (zend_vm_execute.h:92) ==10761== by 0x1439C008: ??? (zend_vm_execute.h:4334) ==10761== by 0x1439713F: execute (zend_vm_execute.h:92) ==10761== by 0x14377A7F: zend_execute_scripts (zend.c:1101) Previous Comments: ------------------------------------------------------------------------ [2005-12-06 10:02:14] helly@php.net Several things: - storing the output of an iterator in an array is most likely wrong. Instead use a FilterIterator to wrap the input iterator (DirectoryIterator in your case) and work on its result. - $dirs = new DirectoryIterator($dirs->dirname()); pretty much sounds like an endless loop. *Which does crash*. Try using xdebug to detect such loops or simply place a var_dump() showing what you are creating the iterator on. - It seems you are trying some kind of recursion. Use RecursiveIteratorIterator with RecursiveDirectoryIterator for that. - To be able to give you a real answer i would need real code that crashes - short reproducing script. ------------------------------------------------------------------------ [2005-12-06 08:49:07] judas dot iscariote at gmail dot com $dirs = new DirectoryIterator( $this->dirname() ); I mean... :-( ------------------------------------------------------------------------ [2005-12-06 08:47:55] judas dot iscariote at gmail dot com if useful.. it is crashing with something like this.. $dirs = new DirectoryIterator( $this->dirname );... of course $this->dirname contains a **valid** directory path. ------------------------------------------------------------------------ [2005-12-06 07:49:17] judas dot iscariote at gmail dot com php -v PHP 5.1.2-dev (cgi) (built: Dec 6 2005 03:03:55) (DEBUG) ------------------------------------------------------------------------ [2005-12-06 07:45:24] judas dot iscariote at gmail dot com Description: ------------ DirectoryIterator class is segfaulting after a Notice : Notice - Object of class DirectoryIterator could not be converted to int ( registered in apache error_log before segfault) Reproduce code: --------------- $dirs = new DirectoryIterator( 'dir' ); foreach( $dirs as $entry ) { if($dirs->isDir($entry) && !$dirs->isDot($entry)){ $list[] = $entry; } } Expected result: ---------------- code executed correctly. Actual result: -------------- notice] child pid 16011 exit signal Segmentation fault (11) can't get a backtrace :-( ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=35567&edit=1

« previous php.bugs (#89843) next »