diff --git a/lib/decompress/zstd_decompress.c b/lib/decompress/zstd_decompress.c index 268ba386..9974dbe3 100644 --- a/lib/decompress/zstd_decompress.c +++ b/lib/decompress/zstd_decompress.c @@ -437,7 +437,7 @@ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t he * Contains the compressed frame size and an upper-bound for the decompressed frame size. * Note: before using `compressedSize` you must check for errors using ZSTD_isError(). * similarly, before using `decompressedBound`, you must check for errors using: - * `decompressedBound` != ZSTD_CONTENTSIZE_UNKNOWN + * `decompressedBound` != ZSTD_CONTENTSIZE_ERROR */ typedef struct { size_t compressedSize; @@ -448,7 +448,7 @@ static ZSTD_frameSizeInfo ZSTD_errorFrameSizeInfo(size_t ret) { ZSTD_frameSizeInfo frameSizeInfo; frameSizeInfo.compressedSize = ret; - frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_UNKNOWN; + frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR; return frameSizeInfo; } diff --git a/tests/fuzzer.c b/tests/fuzzer.c index feb16c80..f74ca5d7 100644 --- a/tests/fuzzer.c +++ b/tests/fuzzer.c @@ -383,6 +383,13 @@ static int basicUnitTests(U32 seed, double compressibility) } DISPLAYLEVEL(3, "OK \n"); + DISPLAYLEVEL(3, "test%3i : ZSTD_decompressBound test with invalid srcSize : ", testNb++); + { + unsigned long long bound = ZSTD_decompressBound(compressedBuffer, cSize - 1); + if (bound != ZSTD_CONTENTSIZE_ERROR) goto _output_error; + } + DISPLAYLEVEL(3, "OK \n"); + DISPLAYLEVEL(3, "test%3i : decompress %u bytes : ", testNb++, (unsigned)CNBuffSize); { size_t const r = ZSTD_decompress(decodedBuffer, CNBuffSize, compressedBuffer, cSize); if (r != CNBuffSize) goto _output_error; } diff --git a/tests/legacy.c b/tests/legacy.c index b749567f..e660b9cc 100644 --- a/tests/legacy.c +++ b/tests/legacy.c @@ -16,10 +16,11 @@ /*=========================================== * Dependencies *==========================================*/ -#include /* size_t */ -#include /* malloc, free */ -#include /* fprintf */ -#include /* strlen */ +#include /* size_t */ +#include /* malloc, free */ +#include /* fprintf */ +#include /* strlen */ +#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_decompressBound */ #include "zstd.h" #include "zstd_errors.h" @@ -130,12 +131,24 @@ static int testStreamingAPI(void) return error_code; } +static int testFrameDecoding(void) +{ + if (ZSTD_decompressBound(COMPRESSED, COMPRESSED_SIZE) != ZSTD_CONTENTSIZE_ERROR) { + DISPLAY("ERROR: ZSTD_decompressBound: Expected to receive ZSTD_CONTENTSIZE_ERROR\n"); + return 1; + } + DISPLAY("Frame Decoding OK\n"); + return 0; +} + int main(void) { { int const ret = testSimpleAPI(); if (ret) return ret; } { int const ret = testStreamingAPI(); if (ret) return ret; } + { int const ret = testFrameDecoding(); + if (ret) return ret; } DISPLAY("OK\n"); return 0;