tony2001 Wed Nov 15 22:09:25 2006 UTC
Added files:
/php-src/ext/standard/tests/array array_pad.phpt
Modified files:
/php-src/ext/standard array.c
Log:
fix memory leak and typo in zend_parse_parameters(), which caused segfault
add test
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.391&r2=1.392&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.391 php-src/ext/standard/array.c:1.392
--- php-src/ext/standard/array.c:1.391 Mon Nov 13 15:34:49 2006
+++ php-src/ext/standard/array.c Wed Nov 15 22:09:25 2006
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.391 2006/11/13 15:34:49 iliaa Exp $ */
+/* $Id: array.c,v 1.392 2006/11/15 22:09:25 tony2001 Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -2669,7 +2669,7 @@
int do_pad; /* Whether we should do padding at all
*/
int i;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|lz", &input,
&pad_size, &pad_value) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "alz", &input,
&pad_size, &pad_value) == FAILURE) {
return;
}
@@ -2690,6 +2690,7 @@
num_pads = pad_size_abs - input_size;
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);
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_pad.phpt?view=markup&rev=1.1
Index: php-src/ext/standard/tests/array/array_pad.phpt
+++ php-src/ext/standard/tests/array/array_pad.phpt
--TEST--
array_pad() tests
--FILE--
<?php
var_dump(array_pad());
var_dump(array_pad(array()));
var_dump(array_pad(array(), 1));
var_dump(array_pad(array(), 1, 0));
var_dump(array_pad(array(), 0, 0));
var_dump(array_pad(array(), -1, 0));
var_dump(array_pad(array("", -1, 2.0), 5, 0));
var_dump(array_pad(array("", -1, 2.0), 5, array()));
var_dump(array_pad(array("", -1, 2.0), 2, array()));
var_dump(array_pad(array("", -1, 2.0), -3, array()));
var_dump(array_pad(array("", -1, 2.0), -4, array()));
var_dump(array_pad(array("", -1, 2.0), 2000000, 0));
echo "Done\n";
?>
--EXPECTF--
Warning: array_pad() expects exactly 3 parameters, 0 given in %s on line %d
NULL
Warning: array_pad() expects exactly 3 parameters, 1 given in %s on line %d
NULL
Warning: array_pad() expects exactly 3 parameters, 2 given in %s on line %d
NULL
array(1) {
[0]=>
int(0)
}
array(0) {
}
array(1) {
[0]=>
int(0)
}
array(5) {
[0]=>
string(0) ""
[1]=>
int(-1)
[2]=>
float(2)
[3]=>
int(0)
[4]=>
int(0)
}
array(5) {
[0]=>
string(0) ""
[1]=>
int(-1)
[2]=>
float(2)
[3]=>
array(0) {
}
[4]=>
array(0) {
}
}
array(3) {
[0]=>
string(0) ""
[1]=>
int(-1)
[2]=>
float(2)
}
array(3) {
[0]=>
string(0) ""
[1]=>
int(-1)
[2]=>
float(2)
}
array(4) {
[0]=>
array(0) {
}
[1]=>
string(0) ""
[2]=>
int(-1)
[3]=>
float(2)
}
Warning: array_pad(): You may only pad up to 1048576 elements at a time in %s
on line %d
bool(false)
Done
--UEXPECTF--
Warning: array_pad() expects exactly 3 parameters, 0 given in %s on line %d
NULL
Warning: array_pad() expects exactly 3 parameters, 1 given in %s on line %d
NULL
Warning: array_pad() expects exactly 3 parameters, 2 given in %s on line %d
NULL
array(1) {
[0]=>
int(0)
}
array(0) {
}
array(1) {
[0]=>
int(0)
}
array(5) {
[0]=>
unicode(0) ""
[1]=>
int(-1)
[2]=>
float(2)
[3]=>
int(0)
[4]=>
int(0)
}
array(5) {
[0]=>
unicode(0) ""
[1]=>
int(-1)
[2]=>
float(2)
[3]=>
array(0) {
}
[4]=>
array(0) {
}
}
array(3) {
[0]=>
unicode(0) ""
[1]=>
int(-1)
[2]=>
float(2)
}
array(3) {
[0]=>
unicode(0) ""
[1]=>
int(-1)
[2]=>
float(2)
}
array(4) {
[0]=>
array(0) {
}
[1]=>
unicode(0) ""
[2]=>
int(-1)
[3]=>
float(2)
}
Warning: array_pad(): You may only pad up to 1048576 elements at a time in %s
on line %d
bool(false)
Done
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php