From: Zeev Suraski Date: Sun, 8 Jun 2003 18:52:53 +0000 (+0000) Subject: Fix handling of object property assignments in switch expressions X-Git-Tag: RELEASE_1_0_2~358 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=faefdb7bddccf8cacb42ebda79e2709b661d1594;p=php Fix handling of object property assignments in switch expressions (bug #23925) --- 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,