Pass ZSTD_CONTENTSIZE_UNKNOWN
authorNick Terrell <terrelln@fb.com>
Tue, 12 Dec 2017 00:21:29 +0000 (16:21 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 12 Dec 2017 00:23:55 +0000 (16:23 -0800)
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

index f94a381..7d5d4b9 100644 (file)
@@ -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(