mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fixed _zend_get_parameters_array
it should not decrease the refcount (spotted by register_shutdown_function in ext/mysqli/tests/bug49442.phpt)
This commit is contained in:
parent
ee30cc8a1e
commit
284141ca8f
@ -78,40 +78,6 @@ ZEND_API int zend_get_parameters(int ht, int param_count, ...) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API int _zend_get_parameters_array(int ht, int param_count, zval *argument_array TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zval *p;
|
||||
int arg_count;
|
||||
zval *param_ptr;
|
||||
|
||||
p = zend_vm_stack_top(TSRMLS_C) - 1;
|
||||
arg_count = Z_LVAL_P(p);
|
||||
|
||||
if (param_count>arg_count) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
while (param_count-->0) {
|
||||
param_ptr = (p-arg_count);
|
||||
if (Z_REFCOUNTED_P(param_ptr) &&
|
||||
!Z_ISREF_P(param_ptr) &&
|
||||
Z_REFCOUNT_P(param_ptr) > 1) {
|
||||
zval new_tmp;
|
||||
|
||||
ZVAL_DUP(&new_tmp, param_ptr);
|
||||
Z_DELREF_P(param_ptr);
|
||||
ZVAL_COPY_VALUE(argument_array, &new_tmp);
|
||||
} else {
|
||||
ZVAL_COPY_VALUE(argument_array, param_ptr);
|
||||
}
|
||||
argument_array++;
|
||||
arg_count--;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* Zend-optimized Extended functions */
|
||||
/* this function doesn't check for too many parameters */
|
||||
ZEND_API int zend_get_parameters_ex(int param_count, ...) /* {{{ */
|
||||
|
@ -233,7 +233,6 @@ int zend_next_free_module(void);
|
||||
|
||||
BEGIN_EXTERN_C()
|
||||
ZEND_API int zend_get_parameters(int ht, int param_count, ...);
|
||||
ZEND_API int _zend_get_parameters_array(int ht, int param_count, zval *argument_array TSRMLS_DC);
|
||||
ZEND_API ZEND_ATTRIBUTE_DEPRECATED int zend_get_parameters_ex(int param_count, ...);
|
||||
ZEND_API int _zend_get_parameters_array_ex(int param_count, zval *argument_array TSRMLS_DC);
|
||||
|
||||
@ -241,7 +240,7 @@ ZEND_API int _zend_get_parameters_array_ex(int param_count, zval *argument_array
|
||||
ZEND_API int zend_copy_parameters_array(int param_count, zval *argument_array TSRMLS_DC);
|
||||
|
||||
#define zend_get_parameters_array(ht, param_count, argument_array) \
|
||||
_zend_get_parameters_array(ht, param_count, argument_array TSRMLS_CC)
|
||||
_zend_get_parameters_array_ex(param_count, argument_array TSRMLS_CC)
|
||||
#define zend_get_parameters_array_ex(param_count, argument_array) \
|
||||
_zend_get_parameters_array_ex(param_count, argument_array TSRMLS_CC)
|
||||
#define zend_parse_parameters_none() \
|
||||
|
Loading…
Reference in New Issue
Block a user