I ran into this with simplexml but am able to reproduce with userland classes.
The segfault only occurs when the property in question does not exist, no __get and __set methods implemented (if either is implemented then no segfault), and is not being called off the initial object in the foreach. i.e. - $obj->valid()->invalid will segfault while $obj->invalid doesnt. class Test implements Iterator { function c() { return new Test(); } /* No need to implement functionality - never gets here */ public function rewind() {} public function key() {} public function current() {} public function next() {} public function hasMore() {} } $obj = new Test(); /* foreach ($obj->c() as $value) { - works correctly with functions implemented foreach ($obj->a as $value) { - correctly issues Invalid argument supplied for foreach() */ foreach ($obj->c()->a as $value) { // Segafults print "Test\n"; } 0x08298238 in zend_pzval_unlock_func (z=0x5a5a5a5a) at /home/rrichards/php5/Zend/zend_execute.c:65 65 z->refcount--; (gdb) bt #0 0x08298238 in zend_pzval_unlock_func (z=0x5a5a5a5a) at /home/rrichards/php5/Zend/zend_execute.c:65 #1 0x082984dd in _get_zval_ptr_ptr (node=0x4047ea2c, Ts=0xbfffb860) at /home/rrichards/php5/Zend/zend_execute.c:142 #2 0x08295c59 in zend_fe_reset_handler (execute_data=0xbfffba90, opline=0x4047ea14, op_array=0x4047e3c0) at /home/rrichards/php5/Zend/zend_execute.c:3630 #3 0x0828f7f4 in execute (op_array=0x4047e3c0) at /home/rrichards/php5/Zend/zend_execute.c:1339 #4 0x0826d4d1 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /home/rrichards/php5/Zend/zend.c:1052 #5 0x0822a364 in php_execute_script (primary_file=0xbfffde90) at /home/rrichards/php5/main/main.c:1647 #6 0x0829c7ee in main (argc=2, argv=0xbfffdf24) at /home/rrichards/php5/sapi/cli/php_cli.c:941 #7 0x42015704 in __libc_start_main () from /lib/tls/libc.so.6 Rob