From 541c202be860af8564766bcd787f105002e3dde4 Mon Sep 17 00:00:00 2001 From: Ben Langmuir Date: Mon, 9 Feb 2015 21:55:44 +0000 Subject: [PATCH] Be more conservative about gethostname()'s truncating behaviour Don't assume it will provide an error or null-terminate the string on truncation, since POSIX doesn't guarantee either behaviour (although Linux and Darwin at least will do the 'right thing'). llvm-svn: 228613 --- clang/lib/Frontend/CompilerInvocation.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index e1d9351a..c1ad805 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2029,8 +2029,12 @@ std::string CompilerInvocation::getModuleHash() const { // running, so mangle the hostname in to the module hash to separate them. char hostname[256]; hostname[0] = 0; - if (gethostname(hostname, 255) == 0) + if (gethostname(hostname, 255) == 0) { + // Forcibly null-terminate the result, since POSIX doesn't require that + // truncation result in an error or that truncated names be null-terminated. + hostname[sizeof(hostname)-1] = 0; code = hash_combine(code, StringRef(hostname)); + } // Ignore failures in gethostname() by not including the hostname in the hash. #endif -- 2.7.4