winhelp: bug fix in LZ77 decompressor

HolyLich lich at math.spbu.ru
Tue Aug 8 07:20:47 CDT 2006


> HolyLich wrote:
> >   ChangeLog:
> >     Fix rather unusual bug in LZ77 decompressor. We cannot use 
memcpy
> >     with overlapped areas because of unpredictable result. We must 
copy
> >     byte-by-byte.
> Why don't you use memmove instead? The man page for memcpy says:
> Use memmove(3) if the memory areas do overlap.

We cannot use memmove. It provides different functionality. It moves 
blocks, but LZ77 decompress algorithm copies bytes.

Let's suppose:
012
XYZ

When we say 'memmove(1, 0, 2)' we will get:
012
XXY

But we (LZ77 algorithm) expect:
012
XXX (three 'X').

memcpy is rather clever (it optmizes process by coping INT instead of 
BYTES). This optimization is fatal for LZ77.

For more information, please, refer to patch. It contains some useful 
comment.

--HolyLich



More information about the wine-devel mailing list