Bug #75786 [Ver->Csd]: segfault when using spread operator on generator passed by reference

From: Date: Tue, 09 Jan 2018 19:25:55 +0000
Subject: Bug #75786 [Ver->Csd]: segfault when using spread operator on generator passed by reference
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-213448@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=75786&edit=1 ID: 75786 Updated by: nikic@php.net Reported by: chris at kruining dot eu Summary: segfault when using spread operator on generator passed by reference -Status: Verified +Status: Closed Type: Bug Package: *General Issues Operating System: Debian - buster PHP Version: PHP 7.1.12-1 (Debian does not yet have 7.1.13 or 7.2.1) Block user comment: N Private report: N New Comment: Automatic comment on behalf of nikita.ppv@gmail.com Revision: http://git.php.net/?p=php-src.git;a=commit;h=fd30c59e041eb4ccaabb2099bb3be15a55e2988d Log: Fixed bug #75786 Previous Comments: ------------------------------------------------------------------------ [2018-01-09 17:50:59] nikic@php.net Verified on master. First memory error: ==24021== Invalid read of size 4 ==24021== at 0xC43FC8: zend_gc_addref (zend_types.h:922) ==24021== by 0xCAF4B0: ZEND_SEND_VAR_SPEC_CV_HANDLER (zend_vm_execute.h:38478) ==24021== by 0xCD7924: execute_ex (zend_vm_execute.h:57842) ==24021== by 0xCD7A78: zend_execute (zend_vm_execute.h:61753) ==24021== by 0xBE7BA8: zend_execute_scripts (zend.c:1538) ==24021== by 0xB49FAF: php_execute_script (main.c:2467) ==24021== by 0xCDA420: do_cli (php_cli.c:1011) ==24021== by 0xCDB5DD: main (php_cli.c:1404) ==24021== Address 0xfb67160 is 0 bytes inside a block of size 40 free'd ==24021== at 0x4C2ED7B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==24021== by 0xBABC2C: _efree (zend_alloc.c:2499) ==24021== by 0xBE3A5F: _zval_dtor_func (zend_variables.c:39) ==24021== by 0xC447AD: i_zval_ptr_dtor (zend_variables.h:49) ==24021== by 0xCD705D: ZEND_YIELD_SPEC_CV_CV_HANDLER (zend_vm_execute.h:52673) ==24021== by 0xCD7924: execute_ex (zend_vm_execute.h:57842) ==24021== by 0xC28894: zend_generator_resume (zend_generators.c:811) ==24021== by 0xC29B16: zend_generator_iterator_move_forward (zend_generators.c:1156) ==24021== by 0xC50588: ZEND_SEND_UNPACK_SPEC_HANDLER (zend_vm_execute.h:1330) ==24021== by 0xCD7924: execute_ex (zend_vm_execute.h:57842) ==24021== by 0xCD7A78: zend_execute (zend_vm_execute.h:61753) ==24021== by 0xBE7BA8: zend_execute_scripts (zend.c:1538) ==24021== Block was alloc'd at ==24021== at 0x4C2DB4F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==24021== by 0xBAC8B4: __zend_malloc (zend_alloc.c:2884) ==24021== by 0xBABB85: _emalloc (zend_alloc.c:2484) ==24021== by 0xBE35FF: zend_string_alloc (zend_string.h:136) ==24021== by 0xBE366F: zend_string_init (zend_string.h:172) ==24021== by 0xBE36EB: zend_string_dup (zend_string.h:192) ==24021== by 0xBE3F85: _zval_copy_ctor_func (zend_variables.c:172) ==24021== by 0xC5047A: ZEND_SEND_UNPACK_SPEC_HANDLER (zend_vm_execute.h:1320) ==24021== by 0xCD7924: execute_ex (zend_vm_execute.h:57842) ==24021== by 0xCD7A78: zend_execute (zend_vm_execute.h:61753) ==24021== by 0xBE7BA8: zend_execute_scripts (zend.c:1538) ==24021== by 0xB49FAF: php_execute_script (main.c:2467) ------------------------------------------------------------------------ [2018-01-09 15:51:29] chris at kruining dot eu updated the summary ------------------------------------------------------------------------ [2018-01-09 15:49:11] chris at kruining dot eu Description: ------------ I've encountered this weird segfault it seems to be a combination of 'newer' techniques that goes wrong somewhere - iteration by reference :: demonstrated in the Foo class - array destruction :: at the end of the example - output :: all the var_dump's (both the locations and amount of var_dumps's seems to matter) I have no clue why this goes wrong, neither does the error log provide useful information(at least for me) php error log :: [Tue Jan 09 16:46:08.907851 2018] [proxy_fcgi:error] [pid 53058:tid 140258613700352] [client 192.168.198.88:55790] AH01067: Failed to read FastCGI header [Tue Jan 09 16:46:08.907896 2018] [proxy_fcgi:error] [pid 53058:tid 140258613700352] (104)Connection reset by peer: [client 192.168.198.88:55790] AH01075: Error dispatching request to : sys log :: Alert from syslog-ng Jan 9 16:46:08 remote kernel: [926537.733411] traps: php-fpm7.1[59524] general protection ip:55a832274080 sp:7ffca575e3d0 error:0 in php-fpm7.1[55a832036000+3d0000] I hope that I have provided enough information to be helpful :D Test script: --------------- <?php class Foo implements IteratorAggregate { protected $items = [ 'this', 'is', 'a', 'item', ]; public function &getIterator(): Generator { foreach($this->items as $key => &$value) { yield $key => $value; } unset($value); } } class Bar { public function doSomething(string $these, string $are, string $some, string $parameters): string { var_dump($these, $are, $some, $parameters); return 'success'; } } $data = [ new Bar, 'doSomething', new Foo, ]; foreach($data[2] as $key => &$value) { $value .= ' foo'; var_dump($value); } unset($value); // Some other code... [ $obj, $method, $arguments, ] = $data; var_dump($arguments, $obj->$method(...$arguments)); ?> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=75786&edit=1

« previous php.bugs (#213448) next »