From: Steinar H. Gunderson Date: Wed, 30 Sep 2020 17:30:34 +0000 (+0200) Subject: Test for errors from zstd. X-Git-Tag: 1.0.0~86 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=a273a2b328c4ab4adf91223978e953e4c69e39cb;p=plocate Test for errors from zstd. --- diff --git a/plocate.cpp b/plocate.cpp index f461d0b..1f811cb 100644 --- a/plocate.cpp +++ b/plocate.cpp @@ -210,12 +210,21 @@ size_t scan_file_block(const string &needle, string_view compressed, { size_t matched = 0; + unsigned long long uncompressed_len = ZSTD_getFrameContentSize(compressed.data(), compressed.size()); + if (uncompressed_len == ZSTD_CONTENTSIZE_UNKNOWN || uncompressed_len == ZSTD_CONTENTSIZE_ERROR) { + fprintf(stderr, "ZSTD_getFrameContentSize() failed\n"); + exit(1); + } + string block; - block.resize(ZSTD_getFrameContentSize(compressed.data(), compressed.size()) + - 1); + block.resize(uncompressed_len + 1); - ZSTD_decompress(&block[0], block.size(), compressed.data(), + size_t err = ZSTD_decompress(&block[0], block.size(), compressed.data(), compressed.size()); + if (ZSTD_isError(err)) { + fprintf(stderr, "ZSTD_decompress(): %s\n", ZSTD_getErrorName(err)); + exit(1); + } block[block.size() - 1] = '\0'; for (const char *filename = block.data();