chore(lzma): improve lzma error reporting

This commit is contained in:
Marcus Holland-Moritz 2024-05-30 12:15:15 +02:00
parent 535bdfa486
commit 9c6422bc9f

View File

@ -146,8 +146,10 @@ lzma_block_compressor::compress(const std::vector<uint8_t>& data,
const lzma_filter* filters) const { const lzma_filter* filters) const {
lzma_stream s = LZMA_STREAM_INIT; lzma_stream s = LZMA_STREAM_INIT;
if (lzma_stream_encoder(&s, filters, LZMA_CHECK_CRC64)) { if (auto ret = lzma_stream_encoder(&s, filters, LZMA_CHECK_CRC64);
DWARFS_THROW(runtime_error, "lzma_stream_encoder"); ret != LZMA_OK) {
DWARFS_THROW(runtime_error, fmt::format("lzma_stream_encoder: {}",
lzma_error_string(ret)));
} }
lzma_action action = LZMA_FINISH; lzma_action action = LZMA_FINISH;
@ -209,9 +211,10 @@ class lzma_block_decompressor final : public block_decompressor::impl {
, uncompressed_size_(get_uncompressed_size(data, size)) { , uncompressed_size_(get_uncompressed_size(data, size)) {
stream_.next_in = data; stream_.next_in = data;
stream_.avail_in = size; stream_.avail_in = size;
if (lzma_stream_decoder(&stream_, UINT64_MAX, LZMA_CONCATENATED) != if (auto ret = lzma_stream_decoder(&stream_, UINT64_MAX, LZMA_CONCATENATED);
LZMA_OK) { ret != LZMA_OK) {
DWARFS_THROW(runtime_error, "lzma_stream_decoder"); DWARFS_THROW(runtime_error, fmt::format("lzma_stream_decoder: {}",
lzma_error_string(ret)));
} }
try { try {
decompressed_.reserve(uncompressed_size_); decompressed_.reserve(uncompressed_size_);
@ -298,8 +301,10 @@ size_t lzma_block_decompressor::get_uncompressed_size(const uint8_t* data,
lzma_stream_flags footer_flags; lzma_stream_flags footer_flags;
if (lzma_stream_footer_decode(&footer_flags, data + pos) != LZMA_OK) { if (auto ret = lzma_stream_footer_decode(&footer_flags, data + pos);
DWARFS_THROW(runtime_error, "lzma_stream_footer_decode()"); ret != LZMA_OK) {
DWARFS_THROW(runtime_error, fmt::format("lzma_stream_footer_decode: {}",
lzma_error_string(ret)));
} }
lzma_vli index_size = footer_flags.backward_size; lzma_vli index_size = footer_flags.backward_size;
@ -310,8 +315,9 @@ size_t lzma_block_decompressor::get_uncompressed_size(const uint8_t* data,
pos -= index_size; pos -= index_size;
lzma_index* index = NULL; lzma_index* index = NULL;
if (lzma_index_decoder(&s, &index, UINT64_MAX) != LZMA_OK) { if (auto ret = lzma_index_decoder(&s, &index, UINT64_MAX); ret != LZMA_OK) {
DWARFS_THROW(runtime_error, "lzma_index_decoder()"); DWARFS_THROW(runtime_error,
fmt::format("lzma_index_decoder: {}", lzma_error_string(ret)));
} }
s.avail_in = index_size; s.avail_in = index_size;