Am Montag 12 März 2007 06:04 schrieb Erich Hoover:
I'm looking into a problem that causes Supreme Commander to segfault (Bug #7643 http://bugs.winehq.org/show_bug.cgi?id=7643) and I believe I may have run into a problem with IWineD3DSurfaceImpl_LockRect. I believe the
problem is a typo in the line:
This->resource.allocatedMemory = HeapAlloc(GetProcessHeap() ,0 , This-> resource.size + 4);
I think that the allocated memory should be the size of the resource multiplied by 4 (instead of adding 4). With the current allocation, for some textures, the operation to calculate the pBits location returns a memory address that is past the end of the allocated memory. So, after this
No, it should definitly be + 4. This->resource.size is supposed to contain the full surface. The + 4 is because old applications use DWORD-Aligned access to palettized textures and write up to 3 bytes beyond the surface.
So either the size calculation is broken, or something in LockRect