From d2760d0aeab4eb6ae744911fd50c25ff5ff9e7ab Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Mon, 27 Apr 2020 17:35:32 -0700 Subject: [PATCH] Fix a use-after-free in GetSwiftStdlibOSDir. XcodeSDK::GetCanonicalName() no longer returns a constant string. --- lldb/include/lldb/Symbol/SwiftASTContext.h | 4 ++-- lldb/source/Symbol/SwiftASTContext.cpp | 4 ++-- lldb/unittests/Symbol/TestSwiftASTContext.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lldb/include/lldb/Symbol/SwiftASTContext.h b/lldb/include/lldb/Symbol/SwiftASTContext.h index 5cd9fccc68cf4..9dd09ba61bd14 100644 --- a/lldb/include/lldb/Symbol/SwiftASTContext.h +++ b/lldb/include/lldb/Symbol/SwiftASTContext.h @@ -1219,8 +1219,8 @@ class SwiftASTContext : public TypeSystemSwift { /// Return the name of the OS-specific subdirectory containing the /// Swift stdlib needed for \p target. - static llvm::StringRef GetSwiftStdlibOSDir(const llvm::Triple &target, - const llvm::Triple &host); + static std::string GetSwiftStdlibOSDir(const llvm::Triple &target, + const llvm::Triple &host); }; class SwiftASTContextForExpressions : public SwiftASTContext { diff --git a/lldb/source/Symbol/SwiftASTContext.cpp b/lldb/source/Symbol/SwiftASTContext.cpp index 521a06d601324..d5f813b86988e 100644 --- a/lldb/source/Symbol/SwiftASTContext.cpp +++ b/lldb/source/Symbol/SwiftASTContext.cpp @@ -995,8 +995,8 @@ static SDKTypeMinVersion GetSDKType(const llvm::Triple &target, /// Return the name of the OS-specific subdirectory containing the /// Swift stdlib needed for \p target. -StringRef SwiftASTContext::GetSwiftStdlibOSDir(const llvm::Triple &target, - const llvm::Triple &host) { +std::string SwiftASTContext::GetSwiftStdlibOSDir(const llvm::Triple &target, + const llvm::Triple &host) { auto sdk = GetSDKType(target, host); XcodeSDK::Info sdk_info; sdk_info.type = sdk.sdk_type; diff --git a/lldb/unittests/Symbol/TestSwiftASTContext.cpp b/lldb/unittests/Symbol/TestSwiftASTContext.cpp index 49f301400300b..94d6206cf2fc7 100644 --- a/lldb/unittests/Symbol/TestSwiftASTContext.cpp +++ b/lldb/unittests/Symbol/TestSwiftASTContext.cpp @@ -71,7 +71,7 @@ struct SwiftASTContextTester : public SwiftASTContext { platform_sdk_path, swift_dir, swift_stdlib_os_dir, xcode_contents_path, toolchain_path, cl_tools_path); } - static llvm::StringRef GetSwiftStdlibOSDir(const llvm::Triple &target, + static std::string GetSwiftStdlibOSDir(const llvm::Triple &target, const llvm::Triple &host) { return SwiftASTContext::GetSwiftStdlibOSDir(target, host); }