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

Reply via email to