diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-03-05 11:10:52 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-03-05 11:10:52 +0400 |
| commit | 040dea8b82a00083b3975351271f34f3775d9a60 (patch) | |
| tree | 0352d30dc79148003cda60a84adbb118ed153987 /Zend/zend_API.c | |
| parent | 19670c2bbcd5fc1339e160929cc81db3ae940392 (diff) | |
| download | php-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.c | 17 |
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; |
