From: Nick Terrell Date: Tue, 12 Dec 2017 00:21:29 +0000 (-0800) Subject: Pass ZSTD_CONTENTSIZE_UNKNOWN X-Git-Tag: v2017.12.18.00~31 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=commitdiff_plain;h=2c8c7ee0d43110856d9974a925f374a772786bc5 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 --- 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(