summaryrefslogtreecommitdiff
path: root/ext/standard
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 /ext/standard
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.
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/dns.c4
1 files changed, 2 insertions, 2 deletions
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;
}