From a273a2b328c4ab4adf91223978e953e4c69e39cb Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 30 Sep 2020 19:30:34 +0200 Subject: [PATCH] Test for errors from zstd. --- plocate.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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(); -- 2.39.2