Prevent double-construction of NumberFormatter

This commit is contained in:
Nikita Popov 2020-08-26 10:16:32 +02:00
parent 72eaf509d3
commit 6b554251f7
2 changed files with 16 additions and 0 deletions

View file

@ -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) {

View file

@ -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'