LPRECT parameters for Main_DirectDrawSurface_Lock

Andreas Eckstein 3ck5731n at gmx.de
Mon Feb 14 20:57:52 CST 2005


Good morning, wine devs!

When playing Icewind Dale II (using wine-20050111), the game sometimes 
crashed with these messages:

    trace:ddraw:Main_DirectDrawSurface_Lock     lprect: 0x0-0x0
    err:ddraw:Main_DirectDrawSurface_Lock  Invalid values in LPRECT !!!

or, on another occasion:

    trace:ddraw:Main_DirectDrawSurface_Lock     lprect: 0x0-2x0
    err:ddraw:Main_DirectDrawSurface_Lock  Invalid values in LPRECT !!!

As you notice, the game tries to lock a surface with width and/or height 
equal to zero. Frankly I have no idea what the expected behavior is in 
this case, however playing the critical passages on Windows worked 
without crash. A quick patch to let Main_DirectDrawSurface_Lock not 
choke on zero-width or -height LPRECTs solved the problem with wine. 
Since I don't plan to dig into wine hacking any time soon, could someone 
merge it into cvs for me (if the new behavior of the function is 
acceptable, that is)? Thanks in advance!

Andreas Eckstein

---

The patch:

--- dlls/ddraw/dsurface/main.c    2005-01-09 18:35:44.000000000 +0100
+++ dlls/ddraw/dsurface/main.c    2005-02-14 21:03:36.511738080 +0100
@@ -1111,8 +1111,8 @@
         (prect->left < 0) ||
         (prect->bottom < 0) ||
         (prect->right < 0) ||
-        (prect->left >= prect->right) ||
-        (prect->top >= prect->bottom) ||
+        (prect->left > prect->right) ||
+        (prect->top > prect->bottom) ||
         (prect->left >= This->surface_desc.dwWidth) ||
         (prect->right > This->surface_desc.dwWidth) ||
         (prect->top >= This->surface_desc.dwHeight) ||




More information about the wine-devel mailing list