summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/intl/formatter/formatter_main.c4
-rw-r--r--ext/intl/tests/formatter_fail.phpt12
2 files changed, 16 insertions, 0 deletions
diff --git a/ext/intl/formatter/formatter_main.c b/ext/intl/formatter/formatter_main.c
index 80d99b3f01..8f44f33fa3 100644
--- a/ext/intl/formatter/formatter_main.c
+++ b/ext/intl/formatter/formatter_main.c
@@ -43,6 +43,10 @@ static int numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
INTL_CHECK_LOCALE_LEN_OR_FAILURE(locale_len);
object = return_value;
FORMATTER_METHOD_FETCH_OBJECT_NO_CHECK;
+ if (FORMATTER_OBJECT(nfo)) {
+ zend_throw_error(NULL, "NumberFormatter object is already constructed");
+ return FAILURE;
+ }
/* Convert pattern (if specified) to UTF-16. */
if(pattern && pattern_len) {
diff --git a/ext/intl/tests/formatter_fail.phpt b/ext/intl/tests/formatter_fail.phpt
index 3201c9a82b..15981178ac 100644
--- a/ext/intl/tests/formatter_fail.phpt
+++ b/ext/intl/tests/formatter_fail.phpt
@@ -75,6 +75,15 @@ try {
}
err($fmt);
+$fmt = new NumberFormatter('en_US', NumberFormatter::DECIMAL);
+try {
+ $fmt->__construct('en_US', NumberFormatter::DECIMAL);
+} catch (Error $e) {
+ print_exception($e);
+ $fmt = null;
+}
+err($fmt);
+
foreach($args as $arg) {
$fmt = crt("O", $arg[0], $arg[1]);
err($fmt);
@@ -95,6 +104,9 @@ ArgumentCountError: numfmt_create() expects at least 2 parameters, 0 given in %s
ArgumentCountError: NumberFormatter::create() expects at least 2 parameters, 0 given in %s on line %d
'U_ZERO_ERROR'
+Error: NumberFormatter object is already constructed in %s on line %d
+'U_ZERO_ERROR'
+
IntlException: Constructor failed in %s on line %d
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'