Skip to content

Commit

Permalink
[lldb] Avoid using any shell when calling xcrun.
Browse files Browse the repository at this point in the history
When we run `xcrun` we don't have any user input in our command so relying on
the user's default shell doesn't make a lot of sense. If the user has set the
system shell to a something that isn't supported yet (dash, ash) then we would
run into the problem that we don't know how to escape our command string.

This patch just avoids using any shell at all as xcrun is always at the same
path.

Reviewed By: aprantl, JDevlieghere, kastiglione

Differential Revision: https://reviews.llvm.org/D104653
  • Loading branch information
Teemperor committed Jun 28, 2021
1 parent 2ab2775 commit 355541a
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
Expand Up @@ -383,17 +383,22 @@ static void ParseOSVersion(llvm::VersionTuple &version, NSString *Key) {

auto xcrun = [](const std::string &sdk,
llvm::StringRef developer_dir = "") -> std::string {
std::string xcrun_cmd = "xcrun --show-sdk-path --sdk " + sdk;
if (!developer_dir.empty())
xcrun_cmd = "/usr/bin/env DEVELOPER_DIR=\"" + developer_dir.str() +
"\" " + xcrun_cmd;
Args args;
if (!developer_dir.empty()) {
args.AppendArgument("/usr/bin/env");
args.AppendArgument("DEVELOPER_DIR=" + developer_dir.str());
}
args.AppendArgument("/usr/bin/xcrun");
args.AppendArgument("--show-sdk-path");
args.AppendArgument("--sdk");
args.AppendArgument(sdk);

int status = 0;
int signo = 0;
std::string output_str;
lldb_private::Status error =
Host::RunShellCommand(xcrun_cmd, FileSpec(), &status, &signo,
&output_str, std::chrono::seconds(15));
Host::RunShellCommand(args, FileSpec(), &status, &signo, &output_str,
std::chrono::seconds(15));

// Check that xcrun return something useful.
if (status != 0 || output_str.empty())
Expand Down

0 comments on commit 355541a

Please sign in to comment.