Skip to content

Commit 8dd381e

Browse files
authored
Merge pull request #9366 from akyrtzi/akyrtzi/pr/136931134-stable
[stable/20240723] [cc1depscan_main] Fix use-after-free when a scan daemon is used and its diagnostic output is used
2 parents 8fb46ff + 831439e commit 8dd381e

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

clang/tools/driver/cc1depscan_main.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ static Expected<llvm::cas::CASID> scanAndUpdateCC1InlineWithTool(
370370
static llvm::Expected<llvm::cas::CASID> scanAndUpdateCC1UsingDaemon(
371371
const char *Exec, ArrayRef<const char *> OldArgs,
372372
StringRef WorkingDirectory, SmallVectorImpl<const char *> &NewArgs,
373-
StringRef &DiagnosticOutput, StringRef Path,
373+
std::string &DiagnosticOutput, StringRef Path,
374374
const DepscanSharing &Sharing,
375375
llvm::function_ref<const char *(const Twine &)> SaveArg,
376376
llvm::cas::ObjectStore &CAS) {
@@ -397,9 +397,13 @@ static llvm::Expected<llvm::cas::CASID> scanAndUpdateCC1UsingDaemon(
397397
CC1DepScanDProtocol::ResultKind Result;
398398
StringRef FailedReason;
399399
StringRef RootID;
400+
StringRef DiagOut;
400401
if (auto E = Comms.getScanResult(Saver, Result, FailedReason, RootID,
401-
RawNewArgs, DiagnosticOutput))
402+
RawNewArgs, DiagOut)) {
403+
DiagnosticOutput = DiagOut;
402404
return std::move(E);
405+
}
406+
DiagnosticOutput = DiagOut;
403407

404408
if (Result != CC1DepScanDProtocol::SuccessResult)
405409
return llvm::createStringError(llvm::inconvertibleErrorCode(),
@@ -504,7 +508,7 @@ static int scanAndUpdateCC1(const char *Exec, ArrayRef<const char *> OldArgs,
504508
if (ProduceIncludeTree)
505509
Sharing.CASArgs.push_back("-fdepscan-include-tree");
506510

507-
StringRef DiagnosticOutput;
511+
std::string DiagnosticOutput;
508512
bool DiagnosticErrorOccurred = false;
509513
auto ScanAndUpdate = [&]() {
510514
if (std::optional<std::string> DaemonPath =

0 commit comments

Comments
 (0)