|
| 1 | +--TEST-- |
| 2 | +collator_sort() and collator_asort() report conversion errors |
| 3 | +--EXTENSIONS-- |
| 4 | +intl |
| 5 | +--FILE-- |
| 6 | +<?php |
| 7 | +class BadProceduralString { |
| 8 | + public function __toString(): string { |
| 9 | + return "\xFF"; |
| 10 | + } |
| 11 | +} |
| 12 | + |
| 13 | +$coll = collator_create('en_US'); |
| 14 | + |
| 15 | +$array = ['b', new BadProceduralString(), 'a']; |
| 16 | +var_dump(collator_sort($coll, $array, Collator::SORT_STRING)); |
| 17 | +var_dump($array[0]); |
| 18 | +var_dump($array[1] instanceof BadProceduralString); |
| 19 | +var_dump($array[2]); |
| 20 | +var_dump(intl_get_error_code() === U_INVALID_CHAR_FOUND); |
| 21 | +echo intl_get_error_message(), "\n"; |
| 22 | +var_dump(collator_get_error_code($coll) === U_INVALID_CHAR_FOUND); |
| 23 | +echo collator_get_error_message($coll), "\n"; |
| 24 | + |
| 25 | +$array = ['b' => 'b', 'bad' => new BadProceduralString(), 'a' => 'a']; |
| 26 | +var_dump(collator_asort($coll, $array, Collator::SORT_STRING)); |
| 27 | +var_dump(array_keys($array)); |
| 28 | +var_dump(intl_get_error_code() === U_INVALID_CHAR_FOUND); |
| 29 | +echo intl_get_error_message(), "\n"; |
| 30 | +var_dump(collator_get_error_code($coll) === U_INVALID_CHAR_FOUND); |
| 31 | +echo collator_get_error_message($coll), "\n"; |
| 32 | +?> |
| 33 | +--EXPECT-- |
| 34 | +bool(false) |
| 35 | +string(1) "b" |
| 36 | +bool(true) |
| 37 | +string(1) "a" |
| 38 | +bool(true) |
| 39 | +collator_sort(): Error comparing array values: U_INVALID_CHAR_FOUND |
| 40 | +bool(true) |
| 41 | +collator_sort(): Error comparing array values: U_INVALID_CHAR_FOUND |
| 42 | +bool(false) |
| 43 | +array(3) { |
| 44 | + [0]=> |
| 45 | + string(1) "b" |
| 46 | + [1]=> |
| 47 | + string(3) "bad" |
| 48 | + [2]=> |
| 49 | + string(1) "a" |
| 50 | +} |
| 51 | +bool(true) |
| 52 | +collator_asort(): Error comparing array values: U_INVALID_CHAR_FOUND |
| 53 | +bool(true) |
| 54 | +collator_asort(): Error comparing array values: U_INVALID_CHAR_FOUND |
0 commit comments