From: Rafael Espindola Date: Mon, 25 Aug 2014 22:53:21 +0000 (+0000) Subject: Fix bug in llvm::sys::argumentsFitWithinSystemLimits(). X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c33fe1b2961169cb0e8ffd92dc67a9328af348f3;p=llvm Fix bug in llvm::sys::argumentsFitWithinSystemLimits(). This patch fixes a subtle bug in the UNIX implementation of llvm::sys::argumentsFitWithinSystemLimits() regarding the misuse of a static variable. This bug causes our cached number that stores the system command line maximum length to be halved after each call to the function. With a sufficient number of calls to this function, it will eventually report any given command line string to be over system limits. Patch by Rafael Auler. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216415 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/Unix/Program.inc b/lib/Support/Unix/Program.inc index 06a33cd7790..63d7ec22ebb 100644 --- a/lib/Support/Unix/Program.inc +++ b/lib/Support/Unix/Program.inc @@ -448,13 +448,13 @@ bool llvm::sys::argumentsFitWithinSystemLimits(ArrayRef Args) { return true; // Conservatively account for space required by environment variables. - ArgMax /= 2; + long HalfArgMax = ArgMax / 2; size_t ArgLength = 0; for (ArrayRef::iterator I = Args.begin(), E = Args.end(); I != E; ++I) { ArgLength += strlen(*I) + 1; - if (ArgLength > size_t(ArgMax)) { + if (ArgLength > size_t(HalfArgMax)) { return false; } }