From: Ben Langmuir Date: Mon, 9 Feb 2015 21:55:44 +0000 (+0000) Subject: Be more conservative about gethostname()'s truncating behaviour X-Git-Tag: llvmorg-3.7.0-rc1~12653 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=541c202be860af8564766bcd787f105002e3dde4;p=platform%2Fupstream%2Fllvm.git 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 --- 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