From 764e231cc5fd400e78ee3a632273fadb8ed38bc2 Mon Sep 17 00:00:00 2001 From: Haitao Lv Date: Mon, 12 Feb 2018 11:20:24 +0800 Subject: [PATCH] fix ZEND_VM_SET_OPCODE_HANDLER cannot set user opcode handler --- Zend/zend_vm_execute.h | 3 ++- Zend/zend_vm_gen.php | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index ccf41339ed..d9f5534ed9 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -66630,7 +66630,8 @@ static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op) { - uint32_t spec = zend_spec_handlers[op->opcode]; + zend_uchar opcode = zend_user_opcodes[op->opcode]; + uint32_t spec = zend_spec_handlers[opcode]; if (spec & SPEC_RULE_COMMUTATIVE) { if (op->op1_type < op->op2_type) { diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 404121317e..aa8df9d95d 100644 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -2646,10 +2646,11 @@ function gen_vm($def, $skel) { // Generate zend_vm_get_opcode_handler() function out($f, "ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)\n"); out($f, "{\n"); + out($f, "\tzend_uchar opcode = zend_user_opcodes[op->opcode];\n"); if (!ZEND_VM_SPEC) { - out($f, "\top->handler = zend_vm_get_opcode_handler(op->opcode, op);\n"); + out($f, "\top->handler = zend_vm_get_opcode_handler(opcode, op);\n"); } else { - out($f, "\tuint32_t spec = zend_spec_handlers[op->opcode];\n\n"); + out($f, "\tuint32_t spec = zend_spec_handlers[opcode];\n\n"); out($f, "\tif (spec & SPEC_RULE_COMMUTATIVE) {\n"); out($f, "\t\tif (op->op1_type < op->op2_type) {\n"); out($f, "\t\t\tzend_swap_operands(op);\n"); -- 2.50.1