diff --git a/lldb/source/Utility/Args.cpp b/lldb/source/Utility/Args.cpp --- a/lldb/source/Utility/Args.cpp +++ b/lldb/source/Utility/Args.cpp @@ -385,7 +385,7 @@ }; static ShellDescriptor g_Shells[] = {{ConstString("bash"), " '\"<>()&;"}, - {ConstString("tcsh"), " '\"<>()&$;"}, + {ConstString("tcsh"), " '\"<>()&;"}, {ConstString("zsh"), " '\"<>()&;\\|"}, {ConstString("sh"), " '\"<>()&;"}}; diff --git a/lldb/test/Shell/Process/Inputs/echo.c b/lldb/test/Shell/Process/Inputs/echo.c new file mode 100644 --- /dev/null +++ b/lldb/test/Shell/Process/Inputs/echo.c @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + for (int i = 0; i < argc; ++i) + printf("%s\n", argv[i]); +} diff --git a/lldb/test/Shell/Process/TestShell.test b/lldb/test/Shell/Process/TestShell.test new file mode 100644 --- /dev/null +++ b/lldb/test/Shell/Process/TestShell.test @@ -0,0 +1,8 @@ +REQUIRES: shell, system-darwin +RUN: %clang_host %p/Inputs/echo.c -o %t.out + +RUN: not %lldb %t.out -b -o 'process launch --shell=tcsh -- $NO_SUCH_SHELL_VARIABLE' 2>&1 | FileCheck --check-prefix=FAILURE %s +RUN: %lldb %t.out -b -o 'process launch --shell=tcsh -- $HOME' 2>&1 | FileCheck --check-prefix=SUCCESS %s + +FAILURE: exited with status 1 +SUCCESS: exited with status = 0 diff --git a/lldb/unittests/Utility/ArgsTest.cpp b/lldb/unittests/Utility/ArgsTest.cpp --- a/lldb/unittests/Utility/ArgsTest.cpp +++ b/lldb/unittests/Utility/ArgsTest.cpp @@ -336,8 +336,8 @@ // Test escaping tcsh special characters. FileSpec tcsh("/bin/tcsh", FileSpec::Style::posix); - EXPECT_EQ(Args::GetShellSafeArgument(tcsh, R"( '"<>()&$;)"), - R"(\ \'\"\<\>\(\)\&\$\;)"); + EXPECT_EQ(Args::GetShellSafeArgument(tcsh, R"( '"<>()&;)"), + R"(\ \'\"\<\>\(\)\&\;)"); // Normal characters and globbing expressions that shouldn't be escaped. EXPECT_EQ(Args::GetShellSafeArgument(tcsh, "aA1*"), "aA1*");