http://bugs.winehq.org/show_bug.cgi?id=33307
--- Comment #24 from Kirill K. Smirnov lich@math.spbu.ru 2013-04-22 21:38:49 CDT --- I've replaced every memcpy() in kernel32/process.c to memcpy_unaligned() and it fixed munged paths - I do not get complaints about L"dows\syste\syswow64" anymore. But heap corruption is still present.
Then I began to remove '_unaligned' suffix and see where munged paths show themselves. It turns to be a 965 line. This code works:
964: memcpy( buffer, DIR_Windows, len * sizeof(WCHAR) ); 965: memcpy_unaligned( buffer + len, default_syswow64W, sizeof(default_syswow64W) ); 966: DIR_SysWow64 = buffer;
and this not:
964: memcpy( buffer, DIR_Windows, len * sizeof(WCHAR) ); 965: memcpy( buffer + len, default_syswow64W, sizeof(default_syswow64W) ); 966: DIR_SysWow64 = buffer;