Skip to content

Commit 1a18012

Browse files
authored
zend_vm_gen: Fix GET_OP*_OBJ_ZVAL_PTR_DEREF for ANY (#18746)
Fixes #18745
1 parent e3cfa4b commit 1a18012

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

Zend/zend_execute.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ typedef int (ZEND_FASTCALL *incdec_t)(zval *);
126126
#define get_zval_ptr_ptr(op_type, node, type) _get_zval_ptr_ptr(op_type, node, type EXECUTE_DATA_CC)
127127
#define get_zval_ptr_ptr_undef(op_type, node, type) _get_zval_ptr_ptr(op_type, node, type EXECUTE_DATA_CC)
128128
#define get_obj_zval_ptr(op_type, node, type) _get_obj_zval_ptr(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
129+
#define get_obj_zval_ptr_deref(op_type, node, type) _get_obj_zval_ptr_deref(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
129130
#define get_obj_zval_ptr_undef(op_type, node, type) _get_obj_zval_ptr_undef(op_type, node, type EXECUTE_DATA_CC OPLINE_CC)
130131
#define get_obj_zval_ptr_ptr(op_type, node, type) _get_obj_zval_ptr_ptr(op_type, node, type EXECUTE_DATA_CC)
131132

@@ -537,6 +538,14 @@ static inline ZEND_ATTRIBUTE_UNUSED zval *_get_obj_zval_ptr(int op_type, znode_o
537538
return get_zval_ptr(op_type, op, type);
538539
}
539540

541+
static inline ZEND_ATTRIBUTE_UNUSED zval *_get_obj_zval_ptr_deref(int op_type, znode_op op, int type EXECUTE_DATA_DC OPLINE_DC)
542+
{
543+
if (op_type == IS_UNUSED) {
544+
return &EX(This);
545+
}
546+
return get_zval_ptr_deref(op_type, op, type);
547+
}
548+
540549
static inline ZEND_ATTRIBUTE_UNUSED zval *_get_obj_zval_ptr_undef(int op_type, znode_op op, int type EXECUTE_DATA_DC OPLINE_DC)
541550
{
542551
if (op_type == IS_UNUSED) {

Zend/zend_vm_gen.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@
363363
);
364364

365365
$op1_get_obj_zval_ptr_deref = array(
366-
"ANY" => "get_obj_zval_ptr(opline->op1_type, opline->op1, \\1)",
366+
"ANY" => "get_obj_zval_ptr_deref(opline->op1_type, opline->op1, \\1)",
367367
"TMP" => "_get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC)",
368368
"VAR" => "_get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC)",
369369
"CONST" => "RT_CONSTANT(opline, opline->op1)",
@@ -374,7 +374,7 @@
374374
);
375375

376376
$op2_get_obj_zval_ptr_deref = array(
377-
"ANY" => "get_obj_zval_ptr(opline->op2_type, opline->op2, \\1)",
377+
"ANY" => "get_obj_zval_ptr_deref(opline->op2_type, opline->op2, \\1)",
378378
"TMP" => "_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)",
379379
"VAR" => "_get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC)",
380380
"CONST" => "RT_CONSTANT(opline, opline->op2)",

0 commit comments

Comments
 (0)