diff options
author | Antony Dovgal <tony2001@php.net> | 2007-10-30 10:17:41 +0000 |
---|---|---|
committer | Antony Dovgal <tony2001@php.net> | 2007-10-30 10:17:41 +0000 |
commit | 7cef86c2466585cf30a7c58229fdb58530455fd7 (patch) | |
tree | 684f029a4bc9e55539605de2590ae95977b71061 /Zend/zend_API.c | |
parent | 400101ac5bfaea70f6639e2954970e89f126bc52 (diff) | |
download | php-git-7cef86c2466585cf30a7c58229fdb58530455fd7.tar.gz |
backport zero args checks from HEAD
(fixes error message when passing parameters to a function accepting none)
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r-- | Zend/zend_API.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index f8ad2f3f27..02530aad71 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -788,11 +788,26 @@ static int zend_parse_va_args(int num_args, char *type_spec, va_list *va, int fl return SUCCESS; } +#define RETURN_IF_ZERO_ARGS(num_args, type_spec, quiet) { \ + int __num_args = (num_args); \ + if (0 == (type_spec)[0] && 0 != __num_args && !(quiet)) { \ + char *__space; \ + char * __class_name = get_active_class_name(&__space TSRMLS_CC); \ + zend_error(E_WARNING, "%s%s%s() expects exactly 0 parameters, %d given", \ + __class_name, __space, \ + get_active_function_name(TSRMLS_C), __num_args); \ + return FAILURE; \ + }\ +} + + ZEND_API int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...) { va_list va; int retval; + RETURN_IF_ZERO_ARGS(num_args, type_spec, flags & ZEND_PARSE_PARAMS_QUIET); + va_start(va, type_spec); retval = zend_parse_va_args(num_args, type_spec, &va, flags TSRMLS_CC); va_end(va); @@ -805,6 +820,8 @@ ZEND_API int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...) va_list va; int retval; + RETURN_IF_ZERO_ARGS(num_args, type_spec, 0); + va_start(va, type_spec); retval = zend_parse_va_args(num_args, type_spec, &va, 0 TSRMLS_CC); va_end(va); @@ -821,11 +838,15 @@ ZEND_API int zend_parse_method_parameters(int num_args TSRMLS_DC, zval *this_ptr zend_class_entry *ce; if (!this_ptr) { + RETURN_IF_ZERO_ARGS(num_args, p, 0); + va_start(va, type_spec); retval = zend_parse_va_args(num_args, type_spec, &va, 0 TSRMLS_CC); va_end(va); } else { p++; + RETURN_IF_ZERO_ARGS(num_args, p, 0); + va_start(va, type_spec); object = va_arg(va, zval **); @@ -853,11 +874,15 @@ ZEND_API int zend_parse_method_parameters_ex(int flags, int num_args TSRMLS_DC, int quiet = flags & ZEND_PARSE_PARAMS_QUIET; if (!this_ptr) { + RETURN_IF_ZERO_ARGS(num_args, p, quiet); + va_start(va, type_spec); retval = zend_parse_va_args(num_args, type_spec, &va, 0 TSRMLS_CC); va_end(va); } else { p++; + RETURN_IF_ZERO_ARGS(num_args-1, p, quiet); + va_start(va, type_spec); object = va_arg(va, zval **); |