diff options
author | Daniel Jasper <djasper@google.com> | 2015-02-18 14:13:46 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2015-02-18 14:13:46 +0000 |
commit | c0b7c80fe62881f41aa5f389fd13defd7e037cdd (patch) | |
tree | e8dc06a907a0ddf8edfcc9f960ddee107400ec68 /clang/lib/Serialization | |
parent | 6ca89920188c5deb1b9f31e9e85e947a817ac6b3 (diff) | |
download | bcm5719-llvm-c0b7c80fe62881f41aa5f389fd13defd7e037cdd.tar.gz bcm5719-llvm-c0b7c80fe62881f41aa5f389fd13defd7e037cdd.zip |
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.
llvm-svn: 229673
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index a0cb7b506bd..3125b8e43e9 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/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); |