From 8bbacaa6f9129eb33ea512c2d7b46e176eb19572 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Mon, 4 Mar 2024 21:33:41 +0000 Subject: [PATCH] ext/gettext: dcgettext/dcngettext fix for stable branches. --- UPGRADING | 4 ---- ext/gettext/gettext.c | 14 ++++++-------- ext/gettext/tests/dcgettext_lcall.phpt | 19 +++++-------------- 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/UPGRADING b/UPGRADING index de91433d8d2b4..efa74cb42cf9d 100644 --- a/UPGRADING +++ b/UPGRADING @@ -218,10 +218,6 @@ PHP 8.2 UPGRADE NOTES dba_fetch(string|array $key, $skip, $dba): string|false is still accepted, but it is recommended to use the new standard variant. -- Gettext: - . dcgettext/dcngettext throw now an exception if the category's argument if set to - `LC_ALL`. - - MBString . mb_check_encoding() now checks input encoding more strictly for certain text encodings, including ISO-2022-JP and UTF-7. diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c index e7928795b279d..15af3cb9b57ff 100644 --- a/ext/gettext/gettext.c +++ b/ext/gettext/gettext.c @@ -62,12 +62,6 @@ ZEND_GET_MODULE(php_gettext) RETURN_THROWS(); \ } -#define PHP_DCGETTEXT_CATEGORY_CHECK(_arg_num, category) \ - if (category == LC_ALL) { \ - zend_argument_value_error(_arg_num, "cannot be LC_ALL"); \ - RETURN_THROWS(); \ - } - PHP_MINFO_FUNCTION(php_gettext) { php_info_print_table_start(); @@ -153,7 +147,9 @@ PHP_FUNCTION(dcgettext) PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain)) PHP_GETTEXT_LENGTH_CHECK(2, ZSTR_LEN(msgid)) - PHP_DCGETTEXT_CATEGORY_CHECK(3, category) + if (category == LC_ALL) { + RETURN_STR_COPY(msgid); + } msgstr = dcgettext(ZSTR_VAL(domain), ZSTR_VAL(msgid), category); @@ -268,7 +264,9 @@ PHP_FUNCTION(dcngettext) PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, domain_len) PHP_GETTEXT_LENGTH_CHECK(2, msgid1_len) PHP_GETTEXT_LENGTH_CHECK(3, msgid2_len) - PHP_DCGETTEXT_CATEGORY_CHECK(5, category) + if (category == LC_ALL) { + RETURN_STRING(msgid1); + } msgstr = dcngettext(domain, msgid1, msgid2, count, category); diff --git a/ext/gettext/tests/dcgettext_lcall.phpt b/ext/gettext/tests/dcgettext_lcall.phpt index 004ae89409eca..f44ff29884639 100644 --- a/ext/gettext/tests/dcgettext_lcall.phpt +++ b/ext/gettext/tests/dcgettext_lcall.phpt @@ -4,18 +4,9 @@ dcgettext with LC_ALL is undefined behavior. gettext --FILE-- getMessage() . PHP_EOL; -} - -try { - dcngettext('dngettextTest', 'item', 'item2', 1, LC_ALL); -} catch (ValueError $e) { - echo $e->getMessage(); -} +var_dump(dcgettext('dngettextTest', 'item', LC_ALL)); +var_dump(dcngettext('dngettextTest', 'item', 'item2', 1, LC_ALL)); ?> ---EXPECTF-- -dcgettext(): Argument #3 ($category) cannot be LC_ALL -dcngettext(): Argument #5 ($category) cannot be LC_ALL +--EXPECT-- +string(4) "item" +string(4) "item"