X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flzx-decompress.c;h=96332dd8f40cf6066ed43d19c482d38c7c6e5408;hp=a24b0832e14be6b955499a621b0da710347cb833;hb=926ff6c5ed956b96fcb521b2c20afcf9ac890b14;hpb=6b8d739e7c68237499366546eb41bc4cb3fff9d4 diff --git a/src/lzx-decompress.c b/src/lzx-decompress.c index a24b0832..96332dd8 100644 --- a/src/lzx-decompress.c +++ b/src/lzx-decompress.c @@ -656,8 +656,6 @@ lzx_decode_match(unsigned main_element, int block_type, /* Verify that the match is in the bounds of the part of the window * currently in use, then copy the source of the match to the current * position. */ - match_dest = window + window_pos; - match_src = match_dest - match_offset; if (match_len > bytes_remaining) { DEBUG("lzx_decode_match(): Match of length %u bytes overflows " @@ -665,13 +663,16 @@ lzx_decode_match(unsigned main_element, int block_type, return -1; } - if (match_src < window) { + if (match_offset > window_pos) { DEBUG("lzx_decode_match(): Match of length %u bytes references " "data before window (match_offset = %u, window_pos = %u)", match_len, match_offset, window_pos); return -1; } + match_dest = window + window_pos; + match_src = match_dest - match_offset; + #if 0 printf("Match: src %u, dst %u, len %u\n", match_src - window, match_dest - window,