From 9b60f0a82b4d864e61fedf803be8a77e7be53b2c Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Wed, 18 Feb 2015 14:13:46 +0000 Subject: [PATCH] Prevent use after free caused by accessing a member into a dense set. The member gets invalidated as elements are added to the dense set. Directly access the underlying pointer instead. Not sure how to create a test case for this :-(. Maybe Richard can help. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@229673 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Serialization/ASTReader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index a0cb7b506b..3125b8e43e 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -6628,7 +6628,8 @@ ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC, auto Merged = MergedLookups.find(DC); if (Merged != MergedLookups.end()) { for (unsigned I = 0; I != Merged->second.size(); ++I) { - LookUpInContexts(Merged->second[I]); + const DeclContext *Context = Merged->second[I]; + LookUpInContexts(Context); // We might have just added some more merged lookups. If so, our // iterator is now invalid, so grab a fresh one before continuing. Merged = MergedLookups.find(DC); -- 2.40.0