]> granicus.if.org Git - php/commitdiff
- Fixed bug #47481 (natcasesort() does not sort extended ASCII characters correctly)
authorJani Taskinen <jani@php.net>
Fri, 17 Jul 2009 11:13:51 +0000 (11:13 +0000)
committerJani Taskinen <jani@php.net>
Fri, 17 Jul 2009 11:13:51 +0000 (11:13 +0000)
ext/standard/strnatcmp.c
ext/standard/tests/strings/bug47481.phpt [new file with mode: 0644]

index 70a546e00e4a9912dce8e07a8f623521d38dd4c0..c03517e659e83d08dbab537928db4690c399535a 100644 (file)
@@ -103,7 +103,7 @@ compare_left(char const *a, char const *b)
  */
 PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case)
 {
-       char ca, cb;
+       unsigned char ca, cb;
        int ai, bi;
        int fractional, result;
 
diff --git a/ext/standard/tests/strings/bug47481.phpt b/ext/standard/tests/strings/bug47481.phpt
new file mode 100644 (file)
index 0000000..4c59a7c
--- /dev/null
@@ -0,0 +1,57 @@
+--TEST--
+Bug #47481 (natcasesort() does not sort extended ASCII characters correctly)
+--FILE--
+<?php
+/* Prototype  : bool natcasesort(array &$array_arg)
+ * Description: Sort an array using case-insensitive natural sort
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Test natcasesort() with extended ASCII characters
+ */
+
+$array = array ('Süden', 'spielen','Sonne','Wind','Regen','Meer');
+echo "\n-- Before sorting: --\n";
+var_dump($array);
+
+echo "\n-- After Sorting: --\n";
+var_dump(natcasesort($array));
+var_dump($array);
+
+echo "Done";
+?>
+--EXPECTF--
+-- Before sorting: --
+array(6) {
+  [0]=>
+  %string|unicode%(6) "Süden"
+  [1]=>
+  %string|unicode%(7) "spielen"
+  [2]=>
+  %string|unicode%(5) "Sonne"
+  [3]=>
+  %string|unicode%(4) "Wind"
+  [4]=>
+  %string|unicode%(5) "Regen"
+  [5]=>
+  %string|unicode%(4) "Meer"
+}
+
+-- After Sorting: --
+bool(true)
+array(6) {
+  [5]=>
+  %string|unicode%(4) "Meer"
+  [4]=>
+  %string|unicode%(5) "Regen"
+  [2]=>
+  %string|unicode%(5) "Sonne"
+  [1]=>
+  %string|unicode%(7) "spielen"
+  [0]=>
+  %string|unicode%(6) "Süden"
+  [3]=>
+  %string|unicode%(4) "Wind"
+}
+Done