}
size_t psi_call_frame_num_var_args(struct psi_call_frame *frame) {
- return zend_hash_next_free_element(&frame->arguments);
+ zend_long nfe = zend_hash_next_free_element(&frame->arguments);
+ return nfe > 0 ? nfe : 0;
}
size_t psi_call_frame_num_fixed_args(struct psi_call_frame *frame) {
ival.zend.cb->fcc = fcc;
}
} else {
- error_code = ZPP_ERROR_FAILURE;
+ _error_code = ZPP_ERROR_FAILURE;
break;
}
void *temp = NULL;
frame_arg = psi_call_frame_get_var_argument(frame, i);
+ if (!frame_arg) {
+ return false;
+ }
switch (frame_arg->va_type) {
case PSI_T_BOOL: let_fn = psi_let_boolval; break;
case PSI_T_INT: let_fn = psi_let_intval; break;
case PSI_T_STRING: let_fn = psi_let_strval; break;
default:
assert(0);
+ return false;
}
frame_arg->ival_ptr = let_fn(&frame_arg->temp_val, NULL, frame_arg->va_type,
}
frame_arg = psi_call_frame_get_argument(frame, cb->func->var->fqn);
+ if (!frame_arg) {
+ return;
+ }
/* callback into userland */
ZVAL_UNDEF(&return_value);