From 05f84cd31d13f9130e35ed438ad72ffbe75a163b Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Mon, 23 May 2016 17:59:17 +0000 Subject: llvm-dwp: More error handling around invalid compressed sections llvm-svn: 270466 --- llvm/tools/llvm-dwp/llvm-dwp.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'llvm/tools/llvm-dwp/llvm-dwp.cpp') 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 Inputs) { return errorCodeToError(Err); if (Name.startswith("zdebug_")) { + UncompressedSections.emplace_back(); uint64_t OriginalSize; if (!zlib::isAvailable()) return make_error("zlib not available"); - if (!consumeCompressedDebugSectionHeader(Contents, OriginalSize)) + if (!consumeCompressedDebugSectionHeader(Contents, OriginalSize) || + zlib::uncompress(Contents, UncompressedSections.back(), + OriginalSize) != zlib::StatusOK) return make_error( ("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(); } -- cgit v1.2.3