php / php/php-src

Side effects during ASSIGN_OP / ASSIGN_DIM_OP may invalidate lvalue

Aperta
#20,319 0 commenti 0 reazioni 1 assegnatario Vedi su GitHub

@arnaud-lb ci sta già lavorando.

Dal 30/10/2025.

Bug Status: Needs Triage
Lingua principale
C
Stelle
40.4k
Fork
8.1k
Merge medio
2g 13h
PR unite (30g)
96

Descrizione

Description

The following code:

$b = ['test'];

var_dump($b[0] .= new class {
    function __toString() {
        unset($GLOBALS['b']);
        return str_repeat('d', (int)getenv('LEN'));
    }
});

var_dump($b);

Results in this output:

==2173273==ERROR: AddressSanitizer: heap-use-after-free on address 0x7c436bfe5261 at pc 0x0000023abcc2 bp 0x7ffe22ebdb60 sp 0x7ffe22ebdb58
READ of size 1 at 0x7c436bfe5261 thread T0
    #0 0x0000023abcc1 in i_zval_ptr_dtor Zend/zend_variables.h:42
    #1 0x0000023cbc5b in concat_function Zend/zend_operators.c:2129
    #2 0x000001ea9203 in zend_binary_op Zend/zend_execute.c:1636
    #3 0x000002111390 in ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER Zend/zend_vm_execute.h:43544
    #4 0x0000021c43b8 in execute_ex Zend/zend_vm_execute.h:120429
    #5 0x0000021c9a6a in zend_execute Zend/zend_vm_execute.h:121476
    #6 0x00000243eab2 in zend_execute_script Zend/zend.c:1977
    #7 0x0000019954ff in php_execute_script_ex main/main.c:2640
    #8 0x000001995a29 in php_execute_script main/main.c:2680
    #9 0x000002447197 in do_cli sapi/cli/php_cli.c:951
    #10 0x00000244aacd in main sapi/cli/php_cli.c:1362
    #11 0x7f736d211574 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #12 0x7f736d211627 in __libc_start_main_impl ../csu/libc-start.c:360
    #13 0x000000402eb4 in _start (sapi/cli/php+0x402eb4) (BuildId: 03d6188d60a93d7775820c05b41e8f2c6a7eb2e8)

Because the container is released during the assignment.

Similarly, the following code:

$b = &$c;
var_dump($b .= new class {
    function __toString() {
        unset($GLOBALS['b'], $GLOBALS['c']);
        return str_repeat('d', (int)getenv('LEN'));
    }
});

var_dump($b);

Resulted in this output:

==2172854==ERROR: AddressSanitizer: heap-use-after-free on address 0x7b90747f8561 at pc 0x0000023abcc2 bp 0x7fff7725b940 sp 0x7fff7725b938
READ of size 1 at 0x7b90747f8561 thread T0
    #0 0x0000023abcc1 in i_zval_ptr_dtor Zend/zend_variables.h:42
    #1 0x0000023cb030 in concat_function Zend/zend_operators.c:2085
    #2 0x000001ea9203 in zend_binary_op Zend/zend_execute.c:1636
    #3 0x00000214c3ba in ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER Zend/zend_vm_execute.h:47698
    #4 0x0000021c5cfa in execute_ex Zend/zend_vm_execute.h:120734
    #5 0x0000021c9a6a in zend_execute Zend/zend_vm_execute.h:121476
    #6 0x00000243eab2 in zend_execute_script Zend/zend.c:1977
    #7 0x0000019954ff in php_execute_script_ex main/main.c:2640
    #8 0x000001995a29 in php_execute_script main/main.c:2680
    #9 0x000002447197 in do_cli sapi/cli/php_cli.c:951
    #10 0x00000244aacd in main sapi/cli/php_cli.c:1362
    #11 0x7f6075a11574 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #12 0x7f6075a11627 in __libc_start_main_impl ../csu/libc-start.c:360
    #13 0x000000402eb4 in _start (sapi/cli/php+0x402eb4) (BuildId: 03d6188d60a93d7775820c05b41e8f2c6a7eb2e8)

Because the reference is freed during the assignment.

PHP Version
PHP 8.3
Operating System

No response

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.