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