mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[DWARF] Use deque in place of SmallVector to fix use-after-free issue
Summary: SmallVector's elements are moved when resizing and cause use-after-free. Reviewers: probinson, dblaikie Subscribers: JDevlieghere, llvm-commits Differential Revision: https://reviews.llvm.org/D49702 llvm-svn: 337772
This commit is contained in:
parent
e049b173d1
commit
372413c6d8
@ -48,6 +48,7 @@
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <deque>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
@ -1248,7 +1249,9 @@ class DWARFObjInMemory final : public DWARFObject {
|
||||
StringRef TUIndexSection;
|
||||
StringRef LineStringSection;
|
||||
|
||||
SmallVector<SmallString<32>, 4> UncompressedSections;
|
||||
// A deque holding section data whose iterators are not invalidated when
|
||||
// new decompressed sections are inserted at the end.
|
||||
std::deque<SmallString<0>> UncompressedSections;
|
||||
|
||||
StringRef *mapSectionToMember(StringRef Name) {
|
||||
if (DWARFSection *Sec = mapNameToDWARFSection(Name))
|
||||
@ -1286,11 +1289,11 @@ class DWARFObjInMemory final : public DWARFObject {
|
||||
if (!Decompressor)
|
||||
return Decompressor.takeError();
|
||||
|
||||
SmallString<32> Out;
|
||||
SmallString<0> Out;
|
||||
if (auto Err = Decompressor->resizeAndDecompress(Out))
|
||||
return Err;
|
||||
|
||||
UncompressedSections.emplace_back(std::move(Out));
|
||||
UncompressedSections.push_back(std::move(Out));
|
||||
Data = UncompressedSections.back();
|
||||
|
||||
return Error::success();
|
||||
|
Loading…
x
Reference in New Issue
Block a user