]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
STREAM_WINDOW_MAX : protect streaming from unreasonable memory requirements
authorYann Collet <cyan@fb.com>
Mon, 22 Aug 2016 23:34:34 +0000 (01:34 +0200)
committerYann Collet <cyan@fb.com>
Mon, 22 Aug 2016 23:34:34 +0000 (01:34 +0200)
lib/decompress/zstd_decompress.c

index 5cd9deb5052013085416f061c2e8dc62b06a5831..524c2f56efa9843b70aa05abbe5bc33895630dc9 100644 (file)
 #endif
 
 
+/*!
+*  STREAM_WINDOW_MAX :
+*  maximum window size accepted by DStream.
+*  frames requiring more memory will be rejected.
+*/
+#ifndef ZSTD_STREAM_WINDOW_MAX
+#  define ZSTD_STREAM_WINDOW_MAX (257 << 20)   /* 257 MB */
+#endif
+
+
 /*-*******************************************************
 *  Dependencies
 *********************************************************/
@@ -1445,6 +1455,7 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
             /* Frame header instruct buffer sizes */
             {   size_t const blockSize = MIN(zds->fParams.windowSize, ZSTD_BLOCKSIZE_ABSOLUTEMAX);
                 size_t const neededOutSize = zds->fParams.windowSize + blockSize;
+                if (zds->fParams.windowSize > ZSTD_STREAM_WINDOW_MAX) return ERROR(frameParameter_unsupported);
                 zds->blockSize = blockSize;
                 if (zds->inBuffSize < blockSize) {
                     zds->customMem.customFree(zds->customMem.opaque, zds->inBuff);