From f93d162e335320c5c33f7ae9f6cc94cce2494f6d Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Thu, 1 Aug 2019 23:37:33 +0000 Subject: [dsymutil] Fix heap-use-after-free related to the LinkOptions. In r367348, I changed dsymutil to pass the LinkOptions by value isntead of by const reference. However, the options were still captured by reference in the LinkLambda. This patch fixes that by passing them in by value. llvm-svn: 367635 --- llvm/tools/dsymutil/dsymutil.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'llvm') diff --git a/llvm/tools/dsymutil/dsymutil.cpp b/llvm/tools/dsymutil/dsymutil.cpp index 60ba1432554..759b5e4e26c 100644 --- a/llvm/tools/dsymutil/dsymutil.cpp +++ b/llvm/tools/dsymutil/dsymutil.cpp @@ -591,9 +591,10 @@ int main(int argc, char **argv) { } } - auto LinkLambda = [&, - OutputFile](std::shared_ptr Stream) { - AllOK.fetch_and(linkDwarf(*Stream, BinHolder, *Map, *OptionsOrErr)); + auto LinkLambda = [&, OutputFile](std::shared_ptr Stream, + LinkOptions Options) { + AllOK.fetch_and( + linkDwarf(*Stream, BinHolder, *Map, std::move(Options))); Stream->flush(); if (Verify && !NoOutput) AllOK.fetch_and(verify(OutputFile, Map->getTriple().getArchName())); @@ -603,9 +604,9 @@ int main(int argc, char **argv) { // out the (significantly smaller) stack when using threads. We don't // want this limitation when we only have a single thread. if (ThreadCount == 1) - LinkLambda(OS); + LinkLambda(OS, *OptionsOrErr); else - Threads.async(LinkLambda, OS); + Threads.async(LinkLambda, OS, *OptionsOrErr); } Threads.wait(); -- cgit v1.2.3