Fix GH-12282: IntlDateFormatter::construct should throw an exception is the locale field has an invalid value.

Close GH-12282
This commit is contained in:
David Carlier 2023-09-23 13:32:53 +01:00
parent 4f044e9238
commit a80db7b52a
3 changed files with 28 additions and 0 deletions

2
NEWS
View file

@ -18,6 +18,8 @@ PHP NEWS
- Intl: - Intl:
. Fixed bug GH-12243 (segfault on IntlDateFormatter::construct). . Fixed bug GH-12243 (segfault on IntlDateFormatter::construct).
(David Carlier) (David Carlier)
. Fixed bug GH-12282 (IntlDateFormatter::construct should throw an exception
on an invalid locale). (David Carlier)
- PCRE: - PCRE:
. Fixed bug GH-11956 (Backport upstream fix, PCRE regular expressions with . Fixed bug GH-11956 (Backport upstream fix, PCRE regular expressions with

View file

@ -111,6 +111,11 @@ static zend_result datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handlin
locale_str = (char *) intl_locale_get_default(); locale_str = (char *) intl_locale_get_default();
} }
locale = Locale::createFromName(locale_str); locale = Locale::createFromName(locale_str);
/* get*Name accessors being set does not preclude being bogus */
if (locale.isBogus() || strlen(locale.getISO3Language()) == 0) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "datefmt_create: invalid locale", 0);
return FAILURE;
}
/* process calendar */ /* process calendar */
if (datefmt_process_calendar_arg(calendar_obj, calendar_long, calendar_is_null, locale, "datefmt_create", if (datefmt_process_calendar_arg(calendar_obj, calendar_long, calendar_is_null, locale, "datefmt_create",

View file

@ -0,0 +1,21 @@
--TEST--
GitHub #12282 IntlDateFormatter::locale with invalid value.
--EXTENSIONS--
intl
--FILE--
<?php
try {
new IntlDateFormatter(
'xx',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
null,
null,
'w'
);
} catch (\IntlException $e) {
echo $e->getMessage();
}
--EXPECT--
datefmt_create: invalid locale: U_ILLEGAL_ARGUMENT_ERROR