From faefdb7bddccf8cacb42ebda79e2709b661d1594 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Sun, 8 Jun 2003 18:52:53 +0000 Subject: [PATCH] Fix handling of object property assignments in switch expressions (bug #23925) --- Zend/zend_execute.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 9dfa6b5ee7..1f4007e35c 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -3054,13 +3054,12 @@ int zend_case_handler(ZEND_OPCODE_HANDLER_ARGS) int switch_expr_is_overloaded=0; if (EX(opline)->op1.op_type==IS_VAR) { - if (EX_T(EX(opline)->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(EX(opline)->op1.u.var).var.ptr_ptr); + if (EX_T(EX(opline)->op1.u.var).var.ptr_ptr + || (EX_T(EX(opline)->op1.u.var).var.ptr && EX_T(EX(opline)->op1.u.var).EA.type!=IS_STRING_OFFSET)) { + PZVAL_LOCK(EX_T(EX(opline)->op1.u.var).var.ptr); } else { switch_expr_is_overloaded = 1; - if (EX_T(EX(opline)->op1.u.var).EA.type==IS_STRING_OFFSET) { - EX_T(EX(opline)->op1.u.var).EA.data.str_offset.str->refcount++; - } + EX_T(EX(opline)->op1.u.var).EA.data.str_offset.str->refcount++; } } is_equal_function(&EX_T(EX(opline)->result.u.var).tmp_var, -- 2.50.1