diff options
| author | Zeev Suraski <zeev@php.net> | 2003-06-08 18:52:53 +0000 |
|---|---|---|
| committer | Zeev Suraski <zeev@php.net> | 2003-06-08 18:52:53 +0000 |
| commit | faefdb7bddccf8cacb42ebda79e2709b661d1594 (patch) | |
| tree | 28e72d1fa64c70d4c6857439ac4602a56cf54b57 /Zend/zend_execute.c | |
| parent | fa78f2b8ebbefd21e212c2162b1ccf3945772508 (diff) | |
| download | php-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.c | 9 |
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, |
