Fixed bug #44929 - Better handling of leading zeros

This is obviously not going to work for Unicode strings, but the whole
function needs to be rewritten, so keep it in synch with the other
branches for now.
This commit is contained in:
Rasmus Lerdorf 2009-04-08 18:18:49 +00:00
parent fa587effb7
commit 452f71b63c
2 changed files with 33 additions and 2 deletions

View file

@ -112,10 +112,10 @@ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len
ca = a[ai]; cb = b[bi];
/* skip over leading spaces or zeros */
while (isspace((int)(unsigned char)ca))
while (isspace((int)(unsigned char)ca) || (ca == '0' && ap+1 < aend))
ca = a[++ai];
while (isspace((int)(unsigned char)cb))
while (isspace((int)(unsigned char)cb) || (cb == '0' && bp+1 < bend))
cb = b[++bi];
/* process run of digits */

View file

@ -0,0 +1,31 @@
--TEST--
Bug #44929 (natsort doesn't handle leading zeros well)
--FILE--
<?php
$a = array('001','008','005','00011','03','000014','-123','0.002','00','0');
natsort($a);
var_dump($a);
?>
--EXPECT--
array(10) {
[6]=>
string(4) "-123"
[7]=>
string(5) "0.002"
[8]=>
string(2) "00"
[9]=>
string(1) "0"
[0]=>
string(3) "001"
[4]=>
string(2) "03"
[2]=>
string(3) "005"
[1]=>
string(3) "008"
[3]=>
string(5) "00011"
[5]=>
string(6) "000014"
}