]> granicus.if.org Git - php/commitdiff
Fix bug #79405 - gethostbyname() silently truncates after a null byte
authorStanislav Malyshev <stas@php.net>
Sun, 3 Jan 2021 02:55:29 +0000 (18:55 -0800)
committerStanislav Malyshev <stas@php.net>
Mon, 4 Jan 2021 09:19:21 +0000 (01:19 -0800)
ext/standard/dns.c
ext/standard/tests/network/bug79405.phpt [new file with mode: 0644]

index 42bc93c41a34a5b478983d85818cbc5aa3b748f7..41b98424edb60a6d8aa2cf1c40ad990c1c59b46d 100644 (file)
@@ -147,7 +147,7 @@ PHP_FUNCTION(gethostbyaddr)
        zend_string *hostname;
 
        ZEND_PARSE_PARAMETERS_START(1, 1)
-               Z_PARAM_STRING(addr, addr_len)
+               Z_PARAM_PATH(addr, addr_len)
        ZEND_PARSE_PARAMETERS_END();
 
        hostname = php_gethostbyaddr(addr);
@@ -207,7 +207,7 @@ PHP_FUNCTION(gethostbyname)
        size_t hostname_len;
 
        ZEND_PARSE_PARAMETERS_START(1, 1)
-               Z_PARAM_STRING(hostname, hostname_len)
+               Z_PARAM_PATH(hostname, hostname_len)
        ZEND_PARSE_PARAMETERS_END();
 
        if (hostname_len > MAXFQDNLEN) {
@@ -230,7 +230,7 @@ PHP_FUNCTION(gethostbynamel)
        int i;
 
        ZEND_PARSE_PARAMETERS_START(1, 1)
-               Z_PARAM_STRING(hostname, hostname_len)
+               Z_PARAM_PATH(hostname, hostname_len)
        ZEND_PARSE_PARAMETERS_END();
 
        if (hostname_len > MAXFQDNLEN) {
diff --git a/ext/standard/tests/network/bug79405.phpt b/ext/standard/tests/network/bug79405.phpt
new file mode 100644 (file)
index 0000000..37da851
--- /dev/null
@@ -0,0 +1,19 @@
+--TEST--
+Bug #76755 (setcookie does not accept "double" type for expire time)
+--FILE--
+<?php
+$host = "localhost\0.example.com";
+try {
+       var_dump(gethostbyname($host));
+} catch(Error $e) {
+       print $e->getMessage()."\n";
+}
+try {
+var_dump(gethostbynamel($host));
+} catch(Error $e) {
+       print $e->getMessage()."\n";
+}
+?>
+--EXPECT--
+gethostbyname(): Argument #1 ($hostname) must not contain any null bytes
+gethostbynamel(): Argument #1 ($hostname) must not contain any null bytes
\ No newline at end of file