Patch bug70542 for Gettext related Bug #70542
Patch version 2015-10-24 05:26 UTC
Return to Bug #70542 |
Download this patch
Patch Revisions:
Developer: kalle@php.net
diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c
index dfe94c7..e3127c3 100644
--- a/ext/gettext/gettext.c
+++ b/ext/gettext/gettext.c
@@ -150,6 +150,40 @@ ZEND_GET_MODULE(php_gettext)
RETURN_FALSE; \
}
+/* This piece of code is to dodge a crash in Solaris
+ * which happens when $category is -1. Note that if -1
+ * is supplied, we simply change it into being LC_ALL
+ * but only for Solaris. Hence why the `case -1:' switch
+ * below remains for other systems where this is not a
+ * problem, like Windows.
+ */
+#if defined(__sun) && defined(__SVR4)
+# define PHP_GETTEXT_CATEGORY_NORMALIZE \
+ if (category == -1) { \
+ category = LC_ALL; \
+ }
+#else
+# define PHP_GETTEXT_CATEGORY_NORMALIZE
+#endif
+
+#define PHP_GETTEXT_CATEGORY_CHECK(category) \
+ PHP_GETTEXT_CATEGORY_NORMALIZE \
+ switch (category) { \
+ case LC_ALL: \
+ case LC_COLLATE: \
+ case LC_CTYPE: \
+ case LC_MESSAGES: \
+ case LC_MONETARY: \
+ case LC_NUMERIC: \
+ case LC_TIME: \
+ case -1: \
+ break; \
+ default: \
+ php_error_docref(NULL, E_WARNING, "invalid category supplied"); \
+ break; \
+ }
+
+
PHP_MINFO_FUNCTION(php_gettext)
{
php_info_print_table_start();
@@ -240,6 +274,7 @@ PHP_NAMED_FUNCTION(zif_dcgettext)
PHP_GETTEXT_DOMAIN_LENGTH_CHECK
PHP_GETTEXT_LENGTH_CHECK("msgid", msgid_len)
+ PHP_GETTEXT_CATEGORY_CHECK(category)
msgstr = dcgettext(domain, msgid, category);
@@ -349,6 +384,7 @@ PHP_NAMED_FUNCTION(zif_dcngettext)
PHP_GETTEXT_DOMAIN_LENGTH_CHECK
PHP_GETTEXT_LENGTH_CHECK("msgid1", msgid1_len)
PHP_GETTEXT_LENGTH_CHECK("msgid2", msgid2_len)
+ PHP_GETTEXT_CATEGORY_CHECK(category)
msgstr = dcngettext(domain, msgid1, msgid2, count, category);
|