summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Faulds <ajf@ajf.me>2017-08-19 20:31:54 +0100
committerAndrea Faulds <ajf@ajf.me>2017-08-19 20:31:54 +0100
commit61538ebadc2ac80b29d6b7a9c355615fe0f40492 (patch)
tree1304ae227443cf6eb1ca87a513971f43c1d9e94a
parent3cad07b84fdf8a1ae87cae1a92da12f6f556bdd1 (diff)
downloadphp-git-61538ebadc2ac80b29d6b7a9c355615fe0f40492.tar.gz
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.
-rw-r--r--NEWS2
-rw-r--r--ext/standard/dns.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 84e0ebcc9c..ee4ffab2ef 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 e0604698bb..d7513e076f 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;
}