kernel32: Fix writing resource section as a last section in UpdateResource()
nsivov at codeweavers.com
Wed Jan 28 07:57:05 CST 2015
What happens here is that write_raw_resources() try to write outside of
mapping boundaries while moving existing sections higher up. Instead of
that we should just add a new section at the end.
This goes like this:
if (!sec->PointerToRawData) /* empty section */
sec->PointerToRawData = write_map->size + (-write_map->size) %
sec->SizeOfRawData = 0;
pointer is potentially outside of mapping already. Later when it's
checked if resource section is a last one:
BOOL rsrc_is_last = sec->PointerToRawData + sec->SizeOfRawData == old_size;
old_size equals to write_map->size at this point. A check fails and
memmove() is called with wrong pointer/length causing a page fault.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 1213 bytes
Desc: not available
More information about the wine-patches