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 | |
| 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.
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | ext/standard/dns.c | 4 |
2 files changed, 4 insertions, 2 deletions
@@ -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; } |
