@@ -1688,8 +1688,9 @@ int zend_func_info_rid = -1;
1688
1688
uint32_t zend_get_func_info (const zend_call_info * call_info , const zend_ssa * ssa )
1689
1689
{
1690
1690
uint32_t ret = 0 ;
1691
+ const zend_function * callee_func = call_info -> callee_func ;
1691
1692
1692
- if (call_info -> callee_func -> type == ZEND_INTERNAL_FUNCTION ) {
1693
+ if (callee_func -> type == ZEND_INTERNAL_FUNCTION ) {
1693
1694
zval * zv ;
1694
1695
func_info_t * info ;
1695
1696
@@ -1700,9 +1701,10 @@ uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa
1700
1701
ret = MAY_BE_NULL ;
1701
1702
} else if (info -> info_func ) {
1702
1703
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 )) {
1706
1708
if (call_info -> num_args == 0 ) {
1707
1709
ret = info -> info ;
1708
1710
} else {
@@ -1718,19 +1720,19 @@ uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa
1718
1720
}
1719
1721
} else {
1720
1722
// 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 );
1722
1724
if (info ) {
1723
1725
ret = info -> return_info .type ;
1724
1726
}
1725
1727
}
1726
1728
if (!ret ) {
1727
1729
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 ) {
1729
1731
ret |= FUNC_MAY_WARN ;
1730
1732
}
1731
- if (call_info -> callee_func -> common .fn_flags & ZEND_ACC_GENERATOR ) {
1733
+ if (callee_func -> common .fn_flags & ZEND_ACC_GENERATOR ) {
1732
1734
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 ) {
1734
1736
ret |= MAY_BE_REF ;
1735
1737
} else {
1736
1738
ret |= MAY_BE_RC1 | MAY_BE_RCN ;
0 commit comments