ID: 16212 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Feedback +Status: Analyzed Bug Type: Reproducible crash Operating System: Mandrake Linux 8.2 -PHP Version: 4.1.2 +PHP Version: CVS HEAD New Comment:
Ok, there's not definitely a problem somewhere. Though I couldn't get a clean segfault like you, only later I discovered the script abnormaly terminates (but not segfault). Given code: <? error_reporting(E_ALL); $x = array("c",array(),"b","a"); $ret = natsort($x); var_dump($ret, $x); echo "ended\n"; ?> Output: $ php -f natsort.php ; echo $? Notice: Array to string conversion in natsort.php on line 4 natsort.php(4) : Notice - Array to string conversion Notice: Array to string conversion in natsort.php on line 4 natsort.php(4) : Notice - Array to string conversion 255 Notice the missing 'ended' string and the return value. After some hunting, I discovered the following: if you replace zend_qsort with qsort in line 400 of ext/standard/array.c I get: $ php -f natsort.php ; echo $? Notice: Array to string conversion in natsort.php on line 4 natsort.php(4) : Notice - Array to string conversion Notice: Array to string conversion in natsort.php on line 4 natsort.php(4) : Notice - Array to string conversion bool(true) array(4) { [1]=> *RECURSION* [3]=> string(1) "a" [2]=> string(1) "b" [0]=> string(1) "c" } ended 0 Someone else got any idea, Andrei|Sterling ? Previous Comments: ------------------------------------------------------------------------ [2002-03-22 14:41:59] [EMAIL PROTECTED] Derick, I am now using RC1 from your page, and I still get the error. Here are my compile options: './configure' '--prefix=/usr' '--with-mysql=/usr' '--with-apxs=/usr/sbin/apxs' '--enable-gd=/usr/lib/gd-1.8.4' '--enable-ftp' I believe I've found what causes it. If I create a multi-dimensional that has a sub-array at either the beginning or end, the engine does not crash: [[EMAIL PROTECTED]]-[~]$ php -r 'error_reporting(E_ALL); $x = array(array(),"c","b","a"); natsort($x); print_r($x);'; Array ( [0] => Array ( ) [3] => a [2] => b [1] => c ) The engine doesn't seggfault. However, if I create a multi-dimensional array with a sub-array anywhere but at the beginning or end, this happens: [[EMAIL PROTECTED]]-[~]$ php -r 'error_reporting(E_ALL); $x = array("c",array(),"b","a"); natsort($x); print_r($x);'; Array ( [1] => Array ( ) [3] => a [2] => b [0] => c ) Segmentation fault ------------------------------------------------------------------------ [2002-03-22 03:43:25] [EMAIL PROTECTED] Me neither, can you try RC1 from www.php.net/~derick ? Derick ------------------------------------------------------------------------ [2002-03-21 18:08:35] [EMAIL PROTECTED] Weird, can't reproduce this at all: $ php -r 'error_reporting(E_ALL); $x = array("a",array("x","y"),"b"); natsort($x);' Command line code(1) : Notice - Array to string conversion Command line code(1) : Notice - Array to string conversion Even with 4.1.2 on another machine no esegfault, just the warnings. ------------------------------------------------------------------------ [2002-03-21 16:44:54] [EMAIL PROTECTED] The problem arises when you attempt to natsort() a multi-dimensional array, which in turn causes the engine to segault. [[EMAIL PROTECTED]]-[~]$ echo '<? $x = array("a",array("x","y"),"b"); natsort($x); ?>' | php -q Segmentation fault This bug exists in both PHP-4.1.2 and the current PHP CVS as of 03/21/02. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=16212&edit=1