@@ -1688,8 +1688,9 @@ int zend_func_info_rid = -1;
16881688uint32_t zend_get_func_info (const zend_call_info * call_info , const zend_ssa * ssa )
16891689{
16901690 uint32_t ret = 0 ;
1691+ const zend_function * callee_func = call_info -> callee_func ;
16911692
1692- if (call_info -> callee_func -> type == ZEND_INTERNAL_FUNCTION ) {
1693+ if (callee_func -> type == ZEND_INTERNAL_FUNCTION ) {
16931694 zval * zv ;
16941695 func_info_t * info ;
16951696
@@ -1700,9 +1701,10 @@ uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa
17001701 ret = MAY_BE_NULL ;
17011702 } else if (info -> info_func ) {
17021703 ret = info -> info_func (call_info , ssa );
1703- } else if (/*call_info->callee_func->common.arg_info && */
1704- call_info -> callee_func -> common .num_args == 0 &&
1705- call_info -> callee_func -> common .required_num_args == 0 ) {
1704+ } else if (/*callee_func->common.arg_info && */
1705+ callee_func -> common .num_args == 0 &&
1706+ callee_func -> common .required_num_args == 0 &&
1707+ !(callee_func -> common .fn_flags & ZEND_ACC_VARIADIC )) {
17061708 if (call_info -> num_args == 0 ) {
17071709 ret = info -> info ;
17081710 } else {
@@ -1718,19 +1720,19 @@ uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa
17181720 }
17191721 } else {
17201722 // FIXME: the order of functions matters!!!
1721- zend_func_info * info = ZEND_FUNC_INFO ((zend_op_array * )call_info -> callee_func );
1723+ zend_func_info * info = ZEND_FUNC_INFO ((zend_op_array * )callee_func );
17221724 if (info ) {
17231725 ret = info -> return_info .type ;
17241726 }
17251727 }
17261728 if (!ret ) {
17271729 ret = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF ;
1728- if (call_info -> callee_func -> type == ZEND_INTERNAL_FUNCTION ) {
1730+ if (callee_func -> type == ZEND_INTERNAL_FUNCTION ) {
17291731 ret |= FUNC_MAY_WARN ;
17301732 }
1731- if (call_info -> callee_func -> common .fn_flags & ZEND_ACC_GENERATOR ) {
1733+ if (callee_func -> common .fn_flags & ZEND_ACC_GENERATOR ) {
17321734 ret = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_OBJECT ;
1733- } else if (call_info -> callee_func -> common .fn_flags & ZEND_ACC_RETURN_REFERENCE ) {
1735+ } else if (callee_func -> common .fn_flags & ZEND_ACC_RETURN_REFERENCE ) {
17341736 ret |= MAY_BE_REF ;
17351737 } else {
17361738 ret |= MAY_BE_RC1 | MAY_BE_RCN ;
0 commit comments