Commit 0dcc08d453d for php

commit 0dcc08d453d0e732a947e7cd145276cbb453ea75
Merge: 80b13459a4e 2cf7ad09bdd
Author: David Carlier <devnexen@gmail.com>
Date:   Fri Oct 9 13:26:23 2026 +0100

    Merge branch 'PHP-8.5' into PHP-8.6

    * PHP-8.5:
      Fix GH-24081: User opcode DISPATCH runs on a stale frame in the TAILCALL VM

    # Conflicts:
    #       Zend/zend_vm_execute.h
    #       Zend/zend_vm_gen.php

diff --cc Zend/zend_vm_execute.h
index dd284391a2a,64e0c5f041e..e9d66ab066f
Binary files differ
diff --cc Zend/zend_vm_gen.php
index 674d1ed5b67,e08d9ebd32b..57b718fcf76
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@@ -2144,8 -2149,7 +2144,9 @@@ function gen_executor($f, $skl, $spec,
                          out($f,"# undef ZEND_VM_RETURN\n");
                          out($f,"# undef ZEND_VM_DISPATCH_TO_HELPER\n");
                          out($f,"# undef ZEND_VM_INTERRUPT\n");
 +                        out($f,"# undef ZEND_VM_ENTER_EX\n");
 +                        out($f,"# undef ZEND_VM_LEAVE\n");
+                         out($f,"# undef ZEND_VM_DISPATCH\n");
                          out($f,"\n");
                          out($f,"# define ZEND_VM_TAIL_CALL(call)               ZEND_MUSTTAIL return call\n");
                          out($f,"# define ZEND_VM_CONTINUE()                    ZEND_VM_TAIL_CALL(opline->handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))\n");
@@@ -2157,8 -2161,7 +2158,9 @@@
                          out($f,"    } while (0)\n");
                          out($f,"# define ZEND_VM_DISPATCH_TO_LEAVE_HELPER(helper) opline = &call_leave_op; SAVE_OPLINE(); ZEND_VM_CONTINUE()\n");
                          out($f,"# define ZEND_VM_INTERRUPT()        ZEND_VM_TAIL_CALL(zend_interrupt_TAILCALL(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))\n");
 +                        out($f,"# define ZEND_VM_ENTER_EX() ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()\n");
 +                        out($f,"# define ZEND_VM_LEAVE()    ZEND_VM_CONTINUE()\n");
+                         out($f,"# define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(zend_vm_get_opcode_handler(opcode, opline)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))\n");
                          out($f,"\n");
                          out($f,"static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV zend_interrupt_helper".($spec?"_SPEC":"")."_TAILCALL(ZEND_OPCODE_HANDLER_ARGS);\n");
                          out($f,"static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV zend_interrupt(ZEND_OPCODE_HANDLER_ARGS);\n");