|
23 | 23 | #ifdef HAVE_LIBINTL |
24 | 24 |
|
25 | 25 | #include <stdio.h> |
| 26 | +#include <locale.h> |
26 | 27 | #include "ext/standard/info.h" |
27 | 28 | #include "php_gettext.h" |
28 | 29 | #include "gettext_arginfo.h" |
@@ -61,6 +62,12 @@ ZEND_GET_MODULE(php_gettext) |
61 | 62 | RETURN_THROWS(); \ |
62 | 63 | } |
63 | 64 |
|
| 65 | +#define PHP_DCGETTEXT_CATEGORY_CHECK(_arg_num, category) \ |
| 66 | + if (category == LC_ALL) { \ |
| 67 | + zend_argument_value_error(_arg_num, "cannot be LC_ALL"); \ |
| 68 | + RETURN_THROWS(); \ |
| 69 | + } |
| 70 | + |
64 | 71 | PHP_MINFO_FUNCTION(php_gettext) |
65 | 72 | { |
66 | 73 | php_info_print_table_start(); |
@@ -146,6 +153,7 @@ PHP_FUNCTION(dcgettext) |
146 | 153 |
|
147 | 154 | PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain)) |
148 | 155 | PHP_GETTEXT_LENGTH_CHECK(2, ZSTR_LEN(msgid)) |
| 156 | + PHP_DCGETTEXT_CATEGORY_CHECK(3, category) |
149 | 157 |
|
150 | 158 | msgstr = dcgettext(ZSTR_VAL(domain), ZSTR_VAL(msgid), category); |
151 | 159 |
|
@@ -260,6 +268,7 @@ PHP_FUNCTION(dcngettext) |
260 | 268 | PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, domain_len) |
261 | 269 | PHP_GETTEXT_LENGTH_CHECK(2, msgid1_len) |
262 | 270 | PHP_GETTEXT_LENGTH_CHECK(3, msgid2_len) |
| 271 | + PHP_DCGETTEXT_CATEGORY_CHECK(5, category) |
263 | 272 |
|
264 | 273 | msgstr = dcngettext(domain, msgid1, msgid2, count, category); |
265 | 274 |
|
|
0 commit comments