kernel32: Fix writing resource section as a last section in UpdateResource()

Nikolay Sivov nsivov at
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...
Name: 0001-kernel32-Fix-writing-resource-section-as-a-last-sect.patch
Type: text/x-patch
Size: 1213 bytes
Desc: not available
URL: <>

More information about the wine-patches mailing list