]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Fix srcSize=0 edge case
authorsenhuang42 <senhuang96@fb.com>
Tue, 10 Nov 2020 20:33:33 +0000 (15:33 -0500)
committersenhuang42 <senhuang96@fb.com>
Mon, 16 Nov 2020 15:49:17 +0000 (10:49 -0500)
lib/compress/zstd_compress.c

index c19b243c9f281ee512854eb6a3b3a564cbaf4de7..98890c4d09eec60d0e6e2daf218f01296d6d8e90 100644 (file)
@@ -4694,6 +4694,16 @@ static size_t ZSTD_compressSequences_internal(void* dst, size_t dstCapacity,
     BYTE* op = (BYTE*)dst;
 
     DEBUGLOG(4, "ZSTD_compressSequences_internal srcSize: %zu, inSeqsSize: %zu", srcSize, inSeqsSize);
+    /* Special case: empty frame */
+    if (remaining == 0) {
+        U32 const cBlockHeader24 = 1 /* last block */ + (((U32)bt_raw)<<1);
+        RETURN_ERROR_IF(dstCapacity<4, dstSize_tooSmall, "No room for empty frame block header");
+        MEM_writeLE32(op, cBlockHeader24);
+        op += ZSTD_blockHeaderSize;
+        dstCapacity -= ZSTD_blockHeaderSize;
+        cSize += ZSTD_blockHeaderSize;
+    }
+
     while (remaining) {
         U32 cBlockSize;
         int additionalByteAdjustment;