diff options
| author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-02-02 13:38:34 +0100 |
|---|---|---|
| committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-02-03 12:28:32 +0100 |
| commit | c2935499b14ee605452016ea00f3c0a94c0a1943 (patch) | |
| tree | 7d5a86d2ee0e609ee8a5d91bcd2783aa453f23f7 /ext/intl/tests/bug79212.phpt | |
| parent | ef1e4891b47949c8dc0f9482eef9454a0ecdfa1d (diff) | |
| download | php-git-c2935499b14ee605452016ea00f3c0a94c0a1943.tar.gz | |
Fix #79212: NumberFormatter::format() may detect wrong type
We have to convert to number *before* detecting the type, to cater to
internal objects implementing `cast_object`.
We also get rid of the fallback behavior of using `FORMAT_TYPE_INT32`,
because that can no longer happen; after `convert_scalar_to_number_ex`
the type is either `IS_LONG` or `IS_DOUBLE`. We cater explicitly to
the `IS_ARRAY` case what also avoids triggering a type confusion when
`::TYPE_INT64` is passed as `$type`.
Diffstat (limited to 'ext/intl/tests/bug79212.phpt')
| -rw-r--r-- | ext/intl/tests/bug79212.phpt | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/ext/intl/tests/bug79212.phpt b/ext/intl/tests/bug79212.phpt new file mode 100644 index 0000000000..0f7897acc4 --- /dev/null +++ b/ext/intl/tests/bug79212.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #79212 (NumberFormatter::format() may detect wrong type) +--SKIPIF-- +<?php +if (!extension_loaded('intl')) die('skip intl extension not available'); +if (!extension_loaded('gmp')) die('skip gmp extension not available'); +?> +--FILE-- +<?php +$fmt = new NumberFormatter('en_US', NumberFormatter::PATTERN_DECIMAL); +var_dump($fmt->format(gmp_init('823749273428379492374'))); + +$fmt = new NumberFormatter('en_US', NumberFormatter::PATTERN_DECIMAL); +var_dump($fmt->format([1], NumberFormatter::TYPE_INT64)); +?> +--EXPECT-- +string(21) "823749273428379400000" +string(1) "1" |
