]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Fix assert in ZSTD_safecopy 1856/head
authorNick Terrell <terrelln@fb.com>
Tue, 29 Oct 2019 00:51:17 +0000 (17:51 -0700)
committerNick Terrell <terrelln@fb.com>
Tue, 29 Oct 2019 00:51:17 +0000 (17:51 -0700)
In the case that `op >= oend_w` it is possible that `diff < 8` because
the two buffers could be adjacent.

Credit to OSS-Fuzz, which found the bug. It isn't reproducible because
it depends on the memory layout.

lib/decompress/zstd_decompress_block.c

index cbb66c8dba0a3bb6896ef40f3c9b605f2b8bb375..767e5f9a0b08db650c65f842d6da673359feed67 100644 (file)
@@ -617,7 +617,7 @@ static void ZSTD_safecopy(BYTE* op, BYTE* const oend_w, BYTE const* ip, ptrdiff_
     ptrdiff_t const diff = op - ip;
     BYTE* const oend = op + length;
 
-    assert((ovtype == ZSTD_no_overlap && (diff <= -8 || diff >= 8)) ||
+    assert((ovtype == ZSTD_no_overlap && (diff <= -8 || diff >= 8 || op >= oend_w)) ||
            (ovtype == ZSTD_overlap_src_before_dst && diff >= 0));
 
     if (length < 8) {