]> granicus.if.org Git - php/commitdiff
Fixed bug #73730 (textdomain(null) throws in strict mode)
authorChristoph M. Becker <cmbecker69@gmx.de>
Sun, 10 Sep 2017 16:39:29 +0000 (18:39 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Sun, 10 Sep 2017 16:39:29 +0000 (18:39 +0200)
The $text_domain parameter may be NULL, which we have to cater to
explicitly with regard to strict_types.

NEWS
ext/gettext/gettext.c
ext/gettext/tests/bug73730.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 795d67d860e5321be1acabfc37b04d2aab2f7585..12c5003acc5f7d3680ecc1dd89d915188c4942bd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -21,6 +21,9 @@ PHP                                                                        NEWS
   . Fixed bug #75124 (gdImageGrayScale() may produce colors). (cmb)
   . Fixed bug #75139 (libgd/gd_interpolation.c:1786: suspicious if ?). (cmb)
 
+- Gettext:
+  . Fixed bug #73730 (textdomain(null) throws in strict mode). (cmb)
+
 - Intl:
   . Fixed bug #75090 (IntlGregorianCalendar doesn't have constants from parent
     class). (tpunt)
index 9cc2ba5a6feef44b09c816e8a9dded5a591e366f..f4d6694cee7a313dd270fc53c0404bc8deb17da1 100644 (file)
@@ -161,16 +161,16 @@ PHP_MINFO_FUNCTION(php_gettext)
    Set the textdomain to "domain". Returns the current domain */
 PHP_NAMED_FUNCTION(zif_textdomain)
 {
-       char *domain, *domain_name, *retval;
-       size_t domain_len;
+       char *domain = NULL, *domain_name, *retval;
+       size_t domain_len = 0;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &domain, &domain_len) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!", &domain, &domain_len) == FAILURE) {
                return;
        }
 
        PHP_GETTEXT_DOMAIN_LENGTH_CHECK
 
-       if (strcmp(domain, "") && strcmp(domain, "0")) {
+       if (domain != NULL && strcmp(domain, "") && strcmp(domain, "0")) {
                domain_name = domain;
        } else {
                domain_name = NULL;
diff --git a/ext/gettext/tests/bug73730.phpt b/ext/gettext/tests/bug73730.phpt
new file mode 100644 (file)
index 0000000..df6d7b0
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Bug #73730 (textdomain(null) throws in strict mode)
+--SKIPIF--
+<?php
+if (!extension_loaded('gettext')) die('skip gettext extension is not available');
+?>
+--FILE--
+<?php
+declare(strict_types=1);
+
+var_dump(textdomain(null));
+?>
+===DONE===
+--EXPECT--
+string(8) "messages"
+===DONE===