Author: sammccall Date: Tue Feb 12 02:38:45 2019 New Revision: 353821 URL: http://llvm.org/viewvc/llvm-project?rev=353821&view=rev Log: [clangd] Fix use-after-free in XRefs
Modified: clang-tools-extra/trunk/clangd/XRefs.cpp Modified: clang-tools-extra/trunk/clangd/XRefs.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/XRefs.cpp?rev=353821&r1=353820&r2=353821&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/XRefs.cpp (original) +++ clang-tools-extra/trunk/clangd/XRefs.cpp Tue Feb 12 02:38:45 2019 @@ -92,19 +92,18 @@ SymbolLocation toIndexLocation(const Loc // Returns the preferred location between an AST location and an index location. SymbolLocation getPreferredLocation(const Location &ASTLoc, - const SymbolLocation &IdxLoc) { + const SymbolLocation &IdxLoc, + std::string &Scratch) { // Also use a dummy symbol for the index location so that other fields (e.g. // definition) are not factored into the preferrence. Symbol ASTSym, IdxSym; ASTSym.ID = IdxSym.ID = SymbolID("dummy_id"); - std::string URIStore; - ASTSym.CanonicalDeclaration = toIndexLocation(ASTLoc, URIStore); + ASTSym.CanonicalDeclaration = toIndexLocation(ASTLoc, Scratch); IdxSym.CanonicalDeclaration = IdxLoc; auto Merged = mergeSymbol(ASTSym, IdxSym); return Merged.CanonicalDeclaration; } - struct MacroDecl { llvm::StringRef Name; const MacroInfo *Info; @@ -352,6 +351,7 @@ std::vector<LocatedSymbol> locateSymbolA LookupRequest QueryRequest; for (auto It : ResultIndex) QueryRequest.IDs.insert(It.first); + std::string Scratch; Index->lookup(QueryRequest, [&](const Symbol &Sym) { auto &R = Result[ResultIndex.lookup(Sym.ID)]; @@ -367,10 +367,10 @@ std::vector<LocatedSymbol> locateSymbolA // Use merge logic to choose AST or index declaration. // We only do this for declarations as definitions from AST // is generally preferred (e.g. definitions in main file). - if (auto Loc = - toLSPLocation(getPreferredLocation(R.PreferredDeclaration, - Sym.CanonicalDeclaration), - *MainFilePath)) + if (auto Loc = toLSPLocation( + getPreferredLocation(R.PreferredDeclaration, + Sym.CanonicalDeclaration, Scratch), + *MainFilePath)) R.PreferredDeclaration = *Loc; } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits