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

Reply via email to