summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-03-05 11:10:52 +0400
committerDmitry Stogov <dmitry@zend.com>2014-03-05 11:10:52 +0400
commit040dea8b82a00083b3975351271f34f3775d9a60 (patch)
tree0352d30dc79148003cda60a84adbb118ed153987 /Zend/zend_API.c
parent19670c2bbcd5fc1339e160929cc81db3ae940392 (diff)
downloadphp-git-040dea8b82a00083b3975351271f34f3775d9a60.tar.gz
Arguments taken by internal functions using zend_parse_parameters() with "+" and "*" specifications must not be deallocated anymore.
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c17
1 files changed, 3 insertions, 14 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 3e532418fb..7aacad1297 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -920,22 +920,11 @@ static int zend_parse_va_args(int num_args, const char *type_spec, va_list *va,
type_spec++;
if (num_varargs > 0) {
- int iv = 0;
- zval *p = (zend_vm_stack_top(TSRMLS_C) - 1 - (arg_count - i));
-
*n_varargs = num_varargs;
-
- /* allocate space for array and store args */
- *varargs = (zval*)safe_emalloc(num_varargs, sizeof(zval), 0);
- while (num_varargs-- > 0) {
- ZVAL_COPY_VALUE(&(*varargs)[iv], p);
- iv++;
- p++;
- }
-
+ *varargs = (zend_vm_stack_top(TSRMLS_C) - 1 - (arg_count - i));
/* adjust how many args we have left and restart loop */
- num_args = num_args + 1 - iv;
- i += iv;
+ num_args += 1 - num_varargs;
+ i += num_varargs;
continue;
} else {
*varargs = NULL;