rasmus Tue, 21 Jul 2009 21:15:48 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=284559
Log: Fix bug #49003 by tweaking the fix to bug #44929 slightly. A 0 followed by any punctuation is now significant instead of just 0's in front of a period. Bugs: http://bugs.php.net/49003 (Analyzed) natsort: sort sequence has changed http://bugs.php.net/49003 (Analyzed) natsort: sort sequence has changed Changed paths: U php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c U php/php-src/branches/PHP_5_2/ext/standard/tests/array/bug44929.phpt U php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c U php/php-src/branches/PHP_5_3/ext/standard/tests/array/bug44929.phpt U php/php-src/trunk/ext/standard/strnatcmp.c U php/php-src/trunk/ext/standard/tests/array/bug44929.phpt Modified: php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c 2009-07-21 21:03:18 UTC (rev 284558) +++ php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c 2009-07-21 21:15:48 UTC (rev 284559) @@ -116,10 +116,10 @@ ca = *ap; cb = *bp; /* skip over leading spaces or zeros */ - while (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && (*(ap+1)!='.'))) + while (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1)))) ca = *++ap; - while (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && (*(bp+1)!='.'))) + while (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1)))) cb = *++bp; /* process run of digits */ Modified: php/php-src/branches/PHP_5_2/ext/standard/tests/array/bug44929.phpt =================================================================== --- php/php-src/branches/PHP_5_2/ext/standard/tests/array/bug44929.phpt 2009-07-21 21:03:18 UTC (rev 284558) +++ php/php-src/branches/PHP_5_2/ext/standard/tests/array/bug44929.phpt 2009-07-21 21:15:48 UTC (rev 284559) @@ -2,20 +2,24 @@ Bug #44929 (natsort doesn't handle leading zeros well) --FILE-- <?php -$a = array('001','008','005','00011','03','000014','-123','0.002','00','0'); +$a = array('001','008','005','00011','03','000014','-123','0.002','00','0','0_0','0-0'); natsort($a); var_dump($a); ?> --EXPECT-- -array(10) { +array(12) { [6]=> string(4) "-123" [8]=> string(2) "00" [9]=> string(1) "0" + [11]=> + string(3) "0-0" [7]=> string(5) "0.002" + [10]=> + string(3) "0_0" [0]=> string(3) "001" [4]=> Modified: php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c 2009-07-21 21:03:18 UTC (rev 284558) +++ php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c 2009-07-21 21:15:48 UTC (rev 284559) @@ -116,10 +116,10 @@ ca = *ap; cb = *bp; /* skip over leading spaces or zeros */ - while (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && (*(ap+1)!='.'))) + while (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1)))) ca = *++ap; - while (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && (*(bp+1)!='.'))) + while (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1)))) cb = *++bp; /* process run of digits */ Modified: php/php-src/branches/PHP_5_3/ext/standard/tests/array/bug44929.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/tests/array/bug44929.phpt 2009-07-21 21:03:18 UTC (rev 284558) +++ php/php-src/branches/PHP_5_3/ext/standard/tests/array/bug44929.phpt 2009-07-21 21:15:48 UTC (rev 284559) @@ -2,20 +2,24 @@ Bug #44929 (natsort doesn't handle leading zeros well) --FILE-- <?php -$a = array(b'001',b'008',b'005',b'00011',b'03',b'000014',b'-123',b'0.002',b'00',b'0'); +$a = array(b'001',b'008',b'005',b'00011',b'03',b'000014',b'-123',b'0.002',b'00',b'0',b'0_0',b'0-0'); natsort($a); var_dump($a); ?> --EXPECT-- -array(10) { +array(12) { [6]=> string(4) "-123" [8]=> string(2) "00" [9]=> string(1) "0" + [11]=> + string(3) "0-0" [7]=> string(5) "0.002" + [10]=> + string(3) "0_0" [0]=> string(3) "001" [4]=> Modified: php/php-src/trunk/ext/standard/strnatcmp.c =================================================================== --- php/php-src/trunk/ext/standard/strnatcmp.c 2009-07-21 21:03:18 UTC (rev 284558) +++ php/php-src/trunk/ext/standard/strnatcmp.c 2009-07-21 21:15:48 UTC (rev 284559) @@ -112,10 +112,10 @@ ca = a[ai]; cb = b[bi]; /* skip over leading spaces or zeros */ - while (isspace((int)(unsigned char)ca) || ((ca == '0' && (ai+1 < a_len)) && (a[ai+1] != '.'))) + while (isspace((int)(unsigned char)ca) || ((ca == '0' && (ai+1 < a_len)) && !ispunct(a[ai+1]))) ca = a[++ai]; - while (isspace((int)(unsigned char)cb) || ((cb == '0' && bi+1 < b_len) && (b[bi+1] != '.'))) + while (isspace((int)(unsigned char)cb) || ((cb == '0' && bi+1 < b_len) && !ispunct(b[bi+1]))) cb = b[++bi]; /* process run of digits */ Modified: php/php-src/trunk/ext/standard/tests/array/bug44929.phpt =================================================================== --- php/php-src/trunk/ext/standard/tests/array/bug44929.phpt 2009-07-21 21:03:18 UTC (rev 284558) +++ php/php-src/trunk/ext/standard/tests/array/bug44929.phpt 2009-07-21 21:15:48 UTC (rev 284559) @@ -2,20 +2,24 @@ Bug #44929 (natsort doesn't handle leading zeros well) --FILE-- <?php -$a = array(b'001',b'008',b'005',b'00011',b'03',b'000014',b'-123',b'0.002',b'00',b'0'); +$a = array(b'001',b'008',b'005',b'00011',b'03',b'000014',b'-123',b'0.002',b'00',b'0',b'0_0',b'0-0'); natsort($a); var_dump($a); ?> --EXPECT-- -array(10) { +array(12) { [6]=> string(4) "-123" [8]=> string(2) "00" [9]=> string(1) "0" + [11]=> + string(3) "0-0" [7]=> string(5) "0.002" + [10]=> + string(3) "0_0" [0]=> string(3) "001" [4]=>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php