MFH: Fix aliasing issue (fixes #48409 , #48428 , #48228)

This commit is contained in:
Arnaud Le Blanc 2009-05-30 16:31:12 +00:00
parent 16398c1990
commit bed00e15d1
2 changed files with 10 additions and 4 deletions

View file

@ -2288,7 +2288,9 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
EG(called_scope) = EX(called_scope);
}
zend_ptr_stack_3_pop(&EG(arg_types_stack), (void*)&EX(called_scope), (void**)&EX(current_object), (void**)&EX(fbc));
EX(called_scope) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(current_object) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(fbc) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
@ -4296,7 +4298,8 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
zval_ptr_dtor(&EX(object));
}
EX(called_scope) = DECODE_CTOR(EX(called_scope));
zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
EX(object) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(fbc) = zend_ptr_stack_pop(&EG(arg_types_stack));
}
for (i=0; i<EX(op_array)->last_brk_cont; i++) {

View file

@ -290,7 +290,9 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
EG(called_scope) = EX(called_scope);
}
zend_ptr_stack_3_pop(&EG(arg_types_stack), (void*)&EX(called_scope), (void**)&EX(current_object), (void**)&EX(fbc));
EX(called_scope) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(current_object) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(fbc) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
@ -636,7 +638,8 @@ static int ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER
zval_ptr_dtor(&EX(object));
}
EX(called_scope) = DECODE_CTOR(EX(called_scope));
zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
EX(object) = zend_ptr_stack_pop(&EG(arg_types_stack));
EX(fbc) = zend_ptr_stack_pop(&EG(arg_types_stack));
}
for (i=0; i<EX(op_array)->last_brk_cont; i++) {