Browse Source

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.
v0.10.5-release
Ben Noordhuis 12 years ago
parent
commit
afbaddecd3
  1. 9
      src/node_os.cc

9
src/node_os.cc

@ -33,7 +33,9 @@
#endif
#ifdef __POSIX__
# 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) {

Loading…
Cancel
Save