From 2c8c7ee0d43110856d9974a925f374a772786bc5 Mon Sep 17 00:00:00 2001 From: Nick Terrell Date: Mon, 11 Dec 2017 16:21:29 -0800 Subject: [PATCH] Pass ZSTD_CONTENTSIZE_UNKNOWN Summary: Content size 0 as unknown is deprecated. See code comments for details. Reviewed By: felixhandte Differential Revision: D6521582 fbshipit-source-id: 876b94cc0123c1020b456cc8f4cd86997afe0619 --- folly/compression/Compression.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/folly/compression/Compression.cpp b/folly/compression/Compression.cpp index f94a381b..7d5d4b9a 100644 --- a/folly/compression/Compression.cpp +++ b/folly/compression/Compression.cpp @@ -1473,12 +1473,25 @@ void ZSTDStreamCodec::resetCStream() { throw std::bad_alloc{}; } } + // As of 1.3.2 ZSTD_initCStream_advanced() interprets content size 0 as + // unknown if contentSizeFlag == 0, but this behavior is deprecated, and will + // be removed in the future. Starting with version 1.3.2 start passing the + // correct value, ZSTD_CONTENTSIZE_UNKNOWN. +#if ZSTD_VERSION_NUMBER >= 10302 + constexpr uint64_t kZstdUnknownContentSize = ZSTD_CONTENTSIZE_UNKNOWN; +#else + constexpr uint64_t kZstdUnknownContentSize = 0; +#endif // Advanced API usage works for all supported versions of zstd. // Required to set contentSizeFlag. auto params = ZSTD_getParams(level_, uncompressedLength().value_or(0), 0); params.fParams.contentSizeFlag = uncompressedLength().hasValue(); zstdThrowIfError(ZSTD_initCStream_advanced( - cstream_.get(), nullptr, 0, params, uncompressedLength().value_or(0))); + cstream_.get(), + nullptr, + 0, + params, + uncompressedLength().value_or(kZstdUnknownContentSize))); } bool ZSTDStreamCodec::doCompressStream( -- 2.34.1