summaryrefslogtreecommitdiff
path: root/ext/intl/tests/bug79212.phpt
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-02-02 13:38:34 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-02-03 12:28:32 +0100
commitc2935499b14ee605452016ea00f3c0a94c0a1943 (patch)
tree7d5a86d2ee0e609ee8a5d91bcd2783aa453f23f7 /ext/intl/tests/bug79212.phpt
parentef1e4891b47949c8dc0f9482eef9454a0ecdfa1d (diff)
downloadphp-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.phpt18
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"