[php-src] Issue #24708: Assertion failure in binary operators when an error handler unsets an operand
| From: | vi3tL0u1s | Date: | Mon, 26 Oct 2026 00:17:51 +0000 |
| Subject: | [php-src] Issue #24708: Assertion failure in binary operators when an error handler unsets an operand | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-253201@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/24708
Author: vi3tL0u1s
### Description
The following code:
```php
<?php
set_error_handler(function () { unset($GLOBALS['x']); });
$x = 1;
$x & $y;
```
Resulted in this output:
```
php: php-src/Zend/zend_operators.c:463: zendi_try_get_long: Assertion `0' failed.
AddressSanitizer:DEADLYSIGNAL
=================================================================
==PID==ERROR: AddressSanitizer: ABRT on unknown address 0x5a2b22cb00131b90 (pc 0x7f89d54279bc bp
0x000000131b90 sp 0x7ffd2a94ea30 T0)
#0 0x7f89d54279bc in pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969bc)
#1 0x7f89d53d3475 in raise (/lib/x86_64-linux-gnu/libc.so.6+0x42475)
#2 0x7f89d53b97f2 in abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f2)
#3 0x7f89d53b971a (/lib/x86_64-linux-gnu/libc.so.6+0x2871a)
#4 0x7f89d53cae95 in __assert_fail (/lib/x86_64-linux-gnu/libc.so.6+0x39e95)
#5 0x55a43aa94bbe in zendi_try_get_long php-src/Zend/zend_operators.c:463
#6 0x55a43aaa0e5d in bitwise_and_function php-src/Zend/zend_operators.c:1894
#7 0x55a43a7f443b in zend_bw_and_helper_SPEC php-src/Zend/zend_vm_execute.h:715
#8 0x55a43a86489c in ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER
php-src/Zend/zend_vm_execute.h:15243
#9 0x55a43a96dbd7 in execute_ex php-src/Zend/zend_vm_execute.h:112535
#10 0x55a43a97b05f in zend_execute php-src/Zend/zend_vm_execute.h:116055
#11 0x55a43aaf429a in zend_execute_script php-src/Zend/zend.c:1986
#12 0x55a43a4e2891 in php_execute_script_ex php-src/main/main.c:2636
#13 0x55a43a4e2dee in php_execute_script php-src/main/main.c:2676
#14 0x55a43aafa06c in do_cli php-src/sapi/cli/php_cli.c:941
#15 0x55a43aafc849 in do_php_cli php-src/sapi/cli/php_cli.c:1354
#16 0x55a43aaf5124 in main php-src/sapi/cli/php_cli_main.c:18
#17 0x7f89d53bad8f (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
#18 0x7f89d53bae3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f)
#19 0x55a439406ef4 in _start (php-src/sapi/cli/php+0x606ef4)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: ABRT (/lib/x86_64-linux-gnu/libc.so.6+0x969bc) in pthread_kill
```
To reproduce:
```
./php-src/sapi/cli/php poc.php
```
Commit:
```
49b2bc4532ec00859256707ac3771657d2889808
```
Configurations:
```
CC=gcc CFLAGS="-g -O1 -fsanitize=address -fno-omit-frame-pointer"
LDFLAGS="-fsanitize=address" \
./configure --enable-debug --disable-shared --enable-pic --enable-mbstring --with-zlib
--without-iconv
```
This bug was found by EyeQ, [Following Dragons: Code Review-Guided
Fuzzing](https://arxiv.org/pdf/2602.10487) (to appear at ICSE 2027).
### PHP Version
```plain
PHP 8.7.0-dev (cli) (built: Oct 26 2026 10:28:24) (NTS DEBUG)
Copyright © The PHP Group and Contributors
Zend Engine v4.7.0-dev, Copyright © Zend by Perforce
```
### Operating System
Ubuntu 22.04