File php-5.2.6-bnc-435595.patch of Package php5
Index: ext/standard/array.c
===================================================================
--- ext/standard/array.c.orig 2008-03-12 20:13:00.000000000 +0100
+++ ext/standard/array.c 2008-11-12 17:09:37.000000000 +0100
@@ -2637,42 +2637,34 @@ PHP_FUNCTION(array_reverse)
Returns a copy of input array padded with pad_value to size pad_size */
PHP_FUNCTION(array_pad)
{
- zval **input; /* Input array */
- zval **pad_size; /* Size to pad to */
- zval **pad_value; /* Padding value obviously */
+ zval *input; /* Input array */
+ zval *pad_value; /* Padding value obviously */
zval ***pads; /* Array to pass to splice */
- HashTable *new_hash; /* Return value from splice */
- int input_size; /* Size of the input array */
- int pad_size_abs; /* Absolute value of pad_size */
- int num_pads; /* How many pads do we need */
- int do_pad; /* Whether we should do padding at all */
+ HashTable *new_hash;/* Return value from splice */
+ long pad_size; /* Size to pad to */
+ long pad_size_abs; /* Absolute value of pad_size */
+ int input_size; /* Size of the input array */
+ int num_pads; /* How many pads do we need */
+ int do_pad; /* Whether we should do padding at all */
int i;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &input, &pad_size, &pad_value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure arguments are of the proper type */
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "alz", &input, &pad_size, &pad_value) == FAILURE) {
return;
}
- convert_to_long_ex(pad_size);
-
+
/* Do some initial calculations */
- input_size = zend_hash_num_elements(Z_ARRVAL_PP(input));
- pad_size_abs = abs(Z_LVAL_PP(pad_size));
+ input_size = zend_hash_num_elements(Z_ARRVAL_P(input));
+ pad_size_abs = abs(pad_size);
if (pad_size_abs < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "You may only pad up to 1048576 elements at a time");
zval_dtor(return_value);
RETURN_FALSE;
}
do_pad = (input_size >= pad_size_abs) ? 0 : 1;
-
+
/* Copy the original array */
- RETVAL_ZVAL(*input, 1, 0);
-
+ RETVAL_ZVAL(input, 1, 0);
+
/* If no need to pad, no need to continue */
if (!do_pad) {
return;
@@ -2680,18 +2672,18 @@ PHP_FUNCTION(array_pad)
/* Populate the pads array */
num_pads = pad_size_abs - input_size;
- if(num_pads > 1048576) {
+ if (num_pads > 1048576) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "You may only pad up to 1048576 elements at a time");
zval_dtor(return_value);
RETURN_FALSE;
}
pads = (zval ***)safe_emalloc(num_pads, sizeof(zval **), 0);
for (i = 0; i < num_pads; i++) {
- pads[i] = pad_value;
+ pads[i] = &pad_value;
}
/* Pad on the right or on the left */
- if (Z_LVAL_PP(pad_size) > 0) {
+ if (pad_size > 0) {
new_hash = php_splice(Z_ARRVAL_P(return_value), input_size, 0, pads, num_pads, NULL);
} else {
new_hash = php_splice(Z_ARRVAL_P(return_value), 0, 0, pads, num_pads, NULL);
@@ -2704,7 +2696,7 @@ PHP_FUNCTION(array_pad)
}
*Z_ARRVAL_P(return_value) = *new_hash;
FREE_HASHTABLE(new_hash);
-
+
/* Clean up */
efree(pads);
}