0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00

os: handle 256 character hostnames

Fix a (rather academic) buffer overflow. MAXHOSTNAMELEN is 256 on most
platforms, which means the buffer wasn't big enough to hold the
trailing nul byte on a system with a maximum length hostname.
This commit is contained in:
Ben Noordhuis 2013-04-15 21:05:20 +02:00
parent 78c5de598b
commit afbaddecd3

View File

@ -33,7 +33,9 @@
#endif
#ifdef __POSIX__
# include <unistd.h> // gethostname, sysconf
# include <netdb.h> // MAXHOSTNAMELEN on Solaris.
# include <unistd.h> // gethostname, sysconf
# include <sys/param.h> // MAXHOSTNAMELEN on Linux and the BSDs.
# include <sys/utsname.h>
#endif
@ -51,10 +53,9 @@ static Handle<Value> GetEndianness(const Arguments& args) {
static Handle<Value> GetHostname(const Arguments& args) {
HandleScope scope;
char s[255];
int r = gethostname(s, 255);
char buf[MAXHOSTNAMELEN + 1];
if (r < 0) {
if (gethostname(buf, sizeof(buf))) {
#ifdef __POSIX__
return ThrowException(ErrnoException(errno, "gethostname"));
#else // __MINGW32__
@ -62,7 +63,7 @@ static Handle<Value> GetHostname(const Arguments& args) {
#endif // __MINGW32__
}
return scope.Close(String::New(s));
return scope.Close(String::New(buf));
}
static Handle<Value> GetOSType(const Arguments& args) {