summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2003-06-08 18:52:53 +0000
committerZeev Suraski <zeev@php.net>2003-06-08 18:52:53 +0000
commitfaefdb7bddccf8cacb42ebda79e2709b661d1594 (patch)
tree28e72d1fa64c70d4c6857439ac4602a56cf54b57 /Zend/zend_execute.c
parentfa78f2b8ebbefd21e212c2162b1ccf3945772508 (diff)
downloadphp-git-faefdb7bddccf8cacb42ebda79e2709b661d1594.tar.gz
Fix handling of object property assignments in switch expressions
(bug #23925)
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c9
1 files 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,