From dab898f9ab62275f55eb2a7e76ea0cd01696f68e Mon Sep 17 00:00:00 2001 From: Serge Pavlov Date: Tue, 14 Jul 2020 17:57:04 +0700 Subject: [Windows] Fix limit on command line size This reapplies commit d4020ef7c474, reverted in ac0edc55887b because it broke build of LLDB. This commit contains appropriate changes for LLDB. The original commit message is below. Documentation on CreateProcessW states that maximal size of command line is 32767 characters including ternimation null character. In the function llvm::sys::commandLineFitsWithinSystemLimits this limit was set to 32768. As a result if command line was exactly 32768 characters long, a response file was not created and CreateProcessW was called with too long command line. Differential Revision: https://reviews.llvm.org/D83772 --- llvm/unittests/Support/CommandLineTest.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'llvm/unittests/Support/CommandLineTest.cpp') diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp index e1b706e..e8c2cef 100644 --- a/llvm/unittests/Support/CommandLineTest.cpp +++ b/llvm/unittests/Support/CommandLineTest.cpp @@ -763,6 +763,18 @@ TEST(CommandLineTest, DefaultOptions) { TEST(CommandLineTest, ArgumentLimit) { std::string args(32 * 4096, 'a'); EXPECT_FALSE(llvm::sys::commandLineFitsWithinSystemLimits("cl", args.data())); + std::string args2(256, 'a'); + EXPECT_TRUE(llvm::sys::commandLineFitsWithinSystemLimits("cl", args2.data())); + if (Triple(sys::getProcessTriple()).isOSWindows()) { + // We use 32000 as a limit for command line length. Program name ('cl'), + // separating spaces and termination null character occupy 5 symbols. + std::string long_arg(32000 - 5, 'b'); + EXPECT_TRUE( + llvm::sys::commandLineFitsWithinSystemLimits("cl", long_arg.data())); + long_arg += 'b'; + EXPECT_FALSE( + llvm::sys::commandLineFitsWithinSystemLimits("cl", long_arg.data())); + } } TEST(CommandLineTest, ResponseFileWindows) { -- cgit v1.1