Bug #77669 [Asn->Csd]: Crash in extract() when overwriting extracted array

From: Date: Thu, 28 Feb 2019 08:59:34 +0000
Subject: Bug #77669 [Asn->Csd]: Crash in extract() when overwriting extracted array
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-219760@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77669&edit=1 ID: 77669 Updated by: nikic@php.net Reported by: profic at gmail dot com Summary: Crash in extract() when overwriting extracted array -Status: Assigned +Status: Closed Type: Bug Package: Reproducible crash Operating System: Ubuntu 18.04/Windows 7 PHP Version: 7.2.15 Assigned To: nikic 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=9ad9cc71ff3bb45532b22b4145ea3af90692b364 Log: Fixed bug #77669 Previous Comments: ------------------------------------------------------------------------ [2019-02-28 08:40:41] nikic@php.net Thanks for the valgrind log, it's very helpful. The problem is that extract() overwrites the same array it is currently extracting. There is protection for this, but apparently it is only being applied to one extract mode, not all of them ... ------------------------------------------------------------------------ [2019-02-26 15:08:22] profic at gmail dot com It got truncated, here is the rest: ==19654== Invalid read of size 8 ==19654== at 0x433610: zend_assign_to_variable (zend_execute.h:117) ==19654== by 0x433610: ZEND_FE_FETCH_R_SPEC_VAR_HANDLER (zend_vm_execute.h:16970) ==19654== by 0x458604: execute_ex (zend_vm_execute.h:60833) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Address 0x16c7b6a8 is 8 bytes inside a block of size 264 free'd ==19654== at 0x4C30D3B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x3BC7E9: zend_array_destroy (zend_hash.c:1330) ==19654== by 0x3BC850: i_zval_ptr_dtor (zend_variables.h:49) ==19654== by 0x3BC850: zend_array_destroy (zend_hash.c:1306) ==19654== by 0x2C51A5: php_extract_prefix_invalid (array.c:2357) ==19654== by 0x2C51A5: zif_extract (array.c:2554) ==19654== by 0x45A641: ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER (zend_vm_execute.h:738) ==19654== by 0x45A641: execute_ex (zend_vm_execute.h:59759) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Block was alloc'd at ==19654== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x37EE88: __zend_malloc (zend_alloc.c:2829) ==19654== by 0x3BA5A0: zend_hash_real_init_ex (zend_hash.c:135) ==19654== by 0x3BA5A0: zend_hash_check_init (zend_hash.c:163) ==19654== by 0x3BA5A0: _zend_hash_index_add_or_update_i (zend_hash.c:715) ==19654== by 0x3BA5A0: _zend_hash_index_add_new (zend_hash.c:829) ==19654== by 0x3F4BC6: zend_fetch_dimension_address_inner (zend_execute.c:1517) ==19654== by 0x3F4BC6: zend_fetch_dimension_address_inner_W (zend_execute.c:1604) ==19654== by 0x43CC50: ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER (zend_vm_execute.h:47310) ==19654== by 0x45577D: execute_ex (zend_vm_execute.h:63077) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== ==19654== Invalid read of size 4 ==19654== at 0x3FE125: _zval_ptr_dtor_nogc (zend_variables.h:39) ==19654== by 0x3FE125: ZEND_FE_FREE_SPEC_TMPVAR_HANDLER (zend_vm_execute.h:48511) ==19654== by 0x4559F2: execute_ex (zend_vm_execute.h:63140) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Address 0x16c7aa70 is 0 bytes inside a block of size 56 free'd ==19654== at 0x4C30D3B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x3BC850: i_zval_ptr_dtor (zend_variables.h:49) ==19654== by 0x3BC850: zend_array_destroy (zend_hash.c:1306) ==19654== by 0x2C51A5: php_extract_prefix_invalid (array.c:2357) ==19654== by 0x2C51A5: zif_extract (array.c:2554) ==19654== by 0x45A641: ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER (zend_vm_execute.h:738) ==19654== by 0x45A641: execute_ex (zend_vm_execute.h:59759) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Block was alloc'd at ==19654== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x37EE88: __zend_malloc (zend_alloc.c:2829) ==19654== by 0x3BDEC1: zend_array_dup (zend_hash.c:1764) ==19654== by 0x43CDEF: ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER (zend_vm_execute.h:47298) ==19654== by 0x45577D: execute_ex (zend_vm_execute.h:63077) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== ==19654== Invalid read of size 4 ==19654== at 0x3BCBF1: i_zval_ptr_dtor (zend_variables.h:48) ==19654== by 0x3BCBF1: zend_symtable_clean (zend_hash.c:1416) ==19654== by 0x452614: zend_clean_and_cache_symbol_table (zend_execute.c:2093) ==19654== by 0x452A5D: zend_leave_helper_SPEC (zend_vm_execute.h:468) ==19654== by 0x4582B6: ZEND_RETURN_SPEC_VAR_HANDLER (zend_vm_execute.h:15997) ==19654== by 0x4582B6: execute_ex (zend_vm_execute.h:60785) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Address 0x16c7aa70 is 0 bytes inside a block of size 56 free'd ==19654== at 0x4C30D3B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x3BC850: i_zval_ptr_dtor (zend_variables.h:49) ==19654== by 0x3BC850: zend_array_destroy (zend_hash.c:1306) ==19654== by 0x2C51A5: php_extract_prefix_invalid (array.c:2357) ==19654== by 0x2C51A5: zif_extract (array.c:2554) ==19654== by 0x45A641: ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER (zend_vm_execute.h:738) ==19654== by 0x45A641: execute_ex (zend_vm_execute.h:59759) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Block was alloc'd at ==19654== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x37EE88: __zend_malloc (zend_alloc.c:2829) ==19654== by 0x3BDEC1: zend_array_dup (zend_hash.c:1764) ==19654== by 0x43CDEF: ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER (zend_vm_execute.h:47298) ==19654== by 0x45577D: execute_ex (zend_vm_execute.h:63077) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== ==19654== Invalid read of size 1 ==19654== at 0x3A88E0: _zval_dtor_func (zend_variables.c:33) ==19654== by 0x3BCD90: i_zval_ptr_dtor (zend_variables.h:49) ==19654== by 0x3BCD90: zend_symtable_clean (zend_hash.c:1416) ==19654== by 0x452614: zend_clean_and_cache_symbol_table (zend_execute.c:2093) ==19654== by 0x452A5D: zend_leave_helper_SPEC (zend_vm_execute.h:468) ==19654== by 0x4582B6: ZEND_RETURN_SPEC_VAR_HANDLER (zend_vm_execute.h:15997) ==19654== by 0x4582B6: execute_ex (zend_vm_execute.h:60785) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Address 0x16c7aa74 is 4 bytes inside a block of size 56 free'd ==19654== at 0x4C30D3B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x3BC850: i_zval_ptr_dtor (zend_variables.h:49) ==19654== by 0x3BC850: zend_array_destroy (zend_hash.c:1306) ==19654== by 0x2C51A5: php_extract_prefix_invalid (array.c:2357) ==19654== by 0x2C51A5: zif_extract (array.c:2554) ==19654== by 0x45A641: ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER (zend_vm_execute.h:738) ==19654== by 0x45A641: execute_ex (zend_vm_execute.h:59759) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== Block was alloc'd at ==19654== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19654== by 0x37EE88: __zend_malloc (zend_alloc.c:2829) ==19654== by 0x3BDEC1: zend_array_dup (zend_hash.c:1764) ==19654== by 0x43CDEF: ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER (zend_vm_execute.h:47298) ==19654== by 0x45577D: execute_ex (zend_vm_execute.h:63077) ==19654== by 0x45C3A6: zend_execute (zend_vm_execute.h:63776) ==19654== by 0x3AAD91: zend_execute_scripts (zend.c:1498) ==19654== by 0x464D59: php_cli_server_dispatch_router.isra.10 (php_cli_server.c:2117) ==19654== by 0x46574A: php_cli_server_dispatch (php_cli_server.c:2156) ==19654== by 0x46574A: php_cli_server_recv_event_read_request (php_cli_server.c:2379) ==19654== by 0x46608D: php_cli_server_do_event_for_each_fd_callback (php_cli_server.c:2457) ==19654== by 0x466C0D: php_cli_server_poller_iter_on_active (php_cli_server.c:846) ==19654== by 0x466C0D: php_cli_server_do_event_for_each_fd (php_cli_server.c:2480) ==19654== by 0x466C0D: php_cli_server_do_event_loop (php_cli_server.c:2490) ==19654== by 0x466C0D: do_cli_server (php_cli_server.c:2612) ==19654== by 0x1F44D1: main (php_cli.c:1406) ==19654== ^C==19654== ==19654== HEAP SUMMARY: ==19654== in use at exit: 100,556 bytes in 1,544 blocks ==19654== total heap usage: 206,894 allocs, 205,350 frees, 33,961,003 bytes allocated ==19654== ==19654== LEAK SUMMARY: ==19654== definitely lost: 7,032 bytes in 13 blocks ==19654== indirectly lost: 5,332 bytes in 42 blocks ==19654== possibly lost: 0 bytes in 0 blocks ==19654== still reachable: 88,192 bytes in 1,489 blocks ==19654== suppressed: 0 bytes in 0 blocks ==19654== Rerun with --leak-check=full to see details of leaked memory ==19654== ==19654== For counts of detected and suppressed errors, rerun with: -v ==19654== Use --track-origins=yes to see where uninitialised values come from ==19654== ERROR SUMMARY: 142 errors from 26 contexts (suppressed: 0 from 0) u7n@ags:/srv/zags-broadcast/web$ ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=77669 -- Edit this bug report at https://bugs.php.net/bug.php?id=77669&edit=1

« previous php.bugs (#219760) next »