]> git.sesse.net Git - plocate/commitdiff
Test for errors from zstd.
authorSteinar H. Gunderson <steinar+git@gunderson.no>
Wed, 30 Sep 2020 17:30:34 +0000 (19:30 +0200)
committerSteinar H. Gunderson <steinar+git@gunderson.no>
Wed, 30 Sep 2020 17:30:34 +0000 (19:30 +0200)
plocate.cpp

index f461d0b32fed38c978bfd3a9eeafbe9418c8b2ab..1f811cb3ad735ff83f24cb07587bd0f994ddc77c 100644 (file)
@@ -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();