diff options
author | David Blaikie <dblaikie@gmail.com> | 2016-05-23 17:59:17 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2016-05-23 17:59:17 +0000 |
commit | 05f84cd31d13f9130e35ed438ad72ffbe75a163b (patch) | |
tree | d2c97444f26a5ea07fea561b3758ef4fd2a2a70a /llvm/tools/llvm-dwp/llvm-dwp.cpp | |
parent | e8dc090a2b5eb642bcf6d5c9e89a19d5f109d28b (diff) | |
download | bcm5719-llvm-05f84cd31d13f9130e35ed438ad72ffbe75a163b.tar.gz bcm5719-llvm-05f84cd31d13f9130e35ed438ad72ffbe75a163b.zip |
llvm-dwp: More error handling around invalid compressed sections
llvm-svn: 270466
Diffstat (limited to 'llvm/tools/llvm-dwp/llvm-dwp.cpp')
-rw-r--r-- | llvm/tools/llvm-dwp/llvm-dwp.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/llvm/tools/llvm-dwp/llvm-dwp.cpp b/llvm/tools/llvm-dwp/llvm-dwp.cpp index b88f0ef37d7..1ce6a14d37b 100644 --- a/llvm/tools/llvm-dwp/llvm-dwp.cpp +++ b/llvm/tools/llvm-dwp/llvm-dwp.cpp @@ -432,20 +432,17 @@ static Error write(MCStreamer &Out, ArrayRef<std::string> Inputs) { return errorCodeToError(Err); if (Name.startswith("zdebug_")) { + UncompressedSections.emplace_back(); uint64_t OriginalSize; if (!zlib::isAvailable()) return make_error<DWPError>("zlib not available"); - if (!consumeCompressedDebugSectionHeader(Contents, OriginalSize)) + if (!consumeCompressedDebugSectionHeader(Contents, OriginalSize) || + zlib::uncompress(Contents, UncompressedSections.back(), + OriginalSize) != zlib::StatusOK) return make_error<DWPError>( ("failure while decompressing compressed section: '" + Name + "\'") .str()); - UncompressedSections.resize(UncompressedSections.size() + 1); - if (zlib::uncompress(Contents, UncompressedSections.back(), - OriginalSize) != zlib::StatusOK) { - UncompressedSections.pop_back(); - continue; - } Name = Name.substr(1); Contents = UncompressedSections.back(); } |