Commit d4f06910225 for php.net
commit d4f069102253dcb9f6274af139001f8184eb826c
Author: Ilija Tovilo <ilija.tovilo@me.com>
Date: Wed Mar 25 16:54:32 2026 +0100
Fix incorrect RC-handling for ZEND_EXT_STMT op1
Fixes GH-21504
Closes GH-21528
diff --git a/NEWS b/NEWS
index 59848d6ab27..9d69dbaf818 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ PHP NEWS
destructors). (iliaal)
. Fixed ZEND_API mismatch on zend_ce_closure forward decl for Windows+Clang.
(henderkes)
+ . Fixed bug GH-21504 (Incorrect RC-handling for ZEND_EXT_STMT op1). (ilutov)
- Iconv:
. Fixed bug GH-17399 (iconv memory leak on bailout). (iliaal)
diff --git a/Zend/tests/gh21504.inc b/Zend/tests/gh21504.inc
new file mode 100644
index 00000000000..71dc5c2e61f
--- /dev/null
+++ b/Zend/tests/gh21504.inc
@@ -0,0 +1,3 @@
+<?php
+
+'1234' |> var_dump(...);
diff --git a/Zend/tests/gh21504.phpt b/Zend/tests/gh21504.phpt
new file mode 100644
index 00000000000..5fd9eaff91a
--- /dev/null
+++ b/Zend/tests/gh21504.phpt
@@ -0,0 +1,12 @@
+--TEST--
+GH-21504: Incorrect RC-handling for ZEND_EXT_STMT op1
+--FILE--
+<?php
+
+$php_escaped = getenv('TEST_PHP_EXECUTABLE_ESCAPED');
+$cmd = $php_escaped . ' -n -e ' . escapeshellarg(__DIR__ . '/gh21504.inc');
+echo shell_exec($cmd);
+
+?>
+--EXPECT--
+string(4) "1234"
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 80f85f421a3..8c748fc8ccc 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -1934,6 +1934,9 @@ static void zend_do_extended_stmt(znode* result) /* {{{ */
opline->opcode = ZEND_EXT_STMT;
if (result) {
+ if (result->op_type == IS_CONST) {
+ Z_TRY_ADDREF(result->u.constant);
+ }
SET_NODE(opline->op1, result);
}
}