diff options
author | Andrea Faulds <ajf@ajf.me> | 2017-08-19 20:31:54 +0100 |
---|---|---|
committer | Andrea Faulds <ajf@ajf.me> | 2017-08-19 20:31:54 +0100 |
commit | 61538ebadc2ac80b29d6b7a9c355615fe0f40492 (patch) | |
tree | 1304ae227443cf6eb1ca87a513971f43c1d9e94a /ext/standard | |
parent | 3cad07b84fdf8a1ae87cae1a92da12f6f556bdd1 (diff) | |
download | php-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.c | 4 |
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; } |