aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Mandrika <kmandrika@google.com>2024-04-24 12:48:55 -0400
committerJoshua Peraza <jperaza@chromium.org>2024-04-24 17:19:58 +0000
commitf88a1aa2af1d1fd795716365245761b89041139d (patch)
tree75657d0c5c2c45eeb27263dceb43f8792632a55c
parenta8a43bad6fdb2d63b623862bea8f6bc959d8edc9 (diff)
downloadgoogle-breakpad-upstream-main.tar.gz
Use zlib's uncompress() to uncompress headersupstream-main
Change-Id: Ib785633b229d3f17534da9b0de93255e80fddd70 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/5484086 Reviewed-by: Joshua Peraza <jperaza@chromium.org>
-rw-r--r--src/common/linux/dump_symbols.cc26
1 files changed, 6 insertions, 20 deletions
diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
index b693fc9e..8e3b9742 100644
--- a/src/common/linux/dump_symbols.cc
+++ b/src/common/linux/dump_symbols.cc
@@ -315,31 +315,17 @@ uint32_t GetCompressionHeader(
std::pair<uint8_t *, uint64_t> UncompressZlibSectionContents(
const uint8_t* compressed_buffer, uint64_t compressed_size, uint64_t uncompressed_size) {
- z_stream stream;
- memset(&stream, 0, sizeof stream);
-
- stream.avail_in = compressed_size;
- stream.avail_out = uncompressed_size;
- stream.next_in = const_cast<uint8_t *>(compressed_buffer);
-
google_breakpad::scoped_array<uint8_t> uncompressed_buffer(
new uint8_t[uncompressed_size]);
- int status = inflateInit(&stream);
- while (stream.avail_in != 0 && status == Z_OK) {
- stream.next_out =
- uncompressed_buffer.get() + uncompressed_size - stream.avail_out;
+ uLongf size = static_cast<uLongf>(uncompressed_size);
- if ((status = inflate(&stream, Z_FINISH)) != Z_STREAM_END) {
- break;
- }
-
- status = inflateReset(&stream);
- }
+ int status = uncompress(
+ uncompressed_buffer.get(), &size, compressed_buffer, compressed_size);
- return inflateEnd(&stream) != Z_OK || status != Z_OK || stream.avail_out != 0
- ? std::make_pair(nullptr, 0)
- : std::make_pair(uncompressed_buffer.release(), uncompressed_size);
+ return status != Z_OK
+ ? std::make_pair(nullptr, 0)
+ : std::make_pair(uncompressed_buffer.release(), uncompressed_size);
}
#ifdef HAVE_LIBZSTD