mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-15 15:26:19 -04:00
Better error handling for ZSTD decompressor
This commit is contained in:
parent
1dc20e6ce1
commit
61ab5daa47
@ -635,13 +635,20 @@ class zstd_block_decompressor : public block_decompressor::impl {
|
|||||||
compression_type type() const override { return compression_type::ZSTD; }
|
compression_type type() const override { return compression_type::ZSTD; }
|
||||||
|
|
||||||
bool decompress_frame(size_t /*frame_size*/) override {
|
bool decompress_frame(size_t /*frame_size*/) override {
|
||||||
|
if (!error_.empty()) {
|
||||||
|
DWARFS_THROW(runtime_error, error_);
|
||||||
|
}
|
||||||
|
|
||||||
decompressed_.resize(uncompressed_size_);
|
decompressed_.resize(uncompressed_size_);
|
||||||
auto rv = ZSTD_decompress(decompressed_.data(), decompressed_.size(), data_,
|
auto rv = ZSTD_decompress(decompressed_.data(), decompressed_.size(), data_,
|
||||||
size_);
|
size_);
|
||||||
|
|
||||||
if (ZSTD_isError(rv)) {
|
if (ZSTD_isError(rv)) {
|
||||||
DWARFS_THROW(runtime_error,
|
decompressed_.clear();
|
||||||
fmt::format("ZSTD: {}", ZSTD_getErrorName(rv)));
|
error_ = fmt::format("ZSTD: {}", ZSTD_getErrorName(rv));
|
||||||
|
DWARFS_THROW(runtime_error, error_);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,6 +659,7 @@ class zstd_block_decompressor : public block_decompressor::impl {
|
|||||||
const uint8_t* const data_;
|
const uint8_t* const data_;
|
||||||
const size_t size_;
|
const size_t size_;
|
||||||
const size_t uncompressed_size_;
|
const size_t uncompressed_size_;
|
||||||
|
std::string error_;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user