From 61538ebadc2ac80b29d6b7a9c355615fe0f40492 Mon Sep 17 00:00:00 2001 From: Andrea Faulds Date: Sat, 19 Aug 2017 20:31:54 +0100 Subject: [PATCH] Fixed bug #75097 (gethostname fails if your host name is 64 chars long) PHP contained two different off-by-one errors, which are fixed here. First, it created a buffer of size HOST_NAME_MAX, not adding space for a null terminator. Second, it subtracted 1 from the size of that buffer when passing its size to gethostname(), despite gethostname() expecting it to be a buffer size including space for a terminating null byte, not a string length. --- NEWS | 2 ++ ext/standard/dns.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 84e0ebcc9ca..ee4ffab2ef9 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,8 @@ PHP NEWS - CURL: . Fixed bug #75093 (OpenSSL support not detected). (Remi) +- Standard: + . Fixed bug #75097 (gethostname fails if your host name is 64 chars long). (Andrea) 31 Aug 2017 PHP 7.0.23 diff --git a/ext/standard/dns.c b/ext/standard/dns.c index e0604698bbd..d7513e076fe 100644 --- a/ext/standard/dns.c +++ b/ext/standard/dns.c @@ -131,13 +131,13 @@ static zend_string *php_gethostbyname(char *name); Get the host name of the current machine */ PHP_FUNCTION(gethostname) { - char buf[HOST_NAME_MAX]; + char buf[HOST_NAME_MAX + 1]; if (zend_parse_parameters_none() == FAILURE) { return; } - if (gethostname(buf, sizeof(buf) - 1)) { + if (gethostname(buf, sizeof(buf))) { php_error_docref(NULL, E_WARNING, "unable to fetch host [%d]: %s", errno, strerror(errno)); RETURN_FALSE; }