wine3d3: Check the destination recangle when for FastBlt().

Vitaliy Margolen wine-devel at kievinfo.com
Sun Jul 29 15:11:50 CDT 2007


Peter Dons Tychsen wrote:
> Hello Wine!
> 
> I have fixed a small bug in FastBlt(), which caused Wine to crash if the
> application tried to do FastBlt() to a surface using a bad destination
> setup. The problem is already fixed in normal Blt(), but was broken for
> FastBlt().
> 
> This fixes a crash for the little game "Treasure Mole Winter Vacations":
> 
> http://www.alawar.com/games/treasuremolewv/
> 
> The game is now fully playable.
> 
> /Pedro
> 
> 
> +    if (((lock_dst.bottom  > This->currentDesc.Height) || (lock_dst.bottom < 0) ||
> +        (lock_dst.top      > This->currentDesc.Height) || (lock_dst.top    < 0) ||
> +        (lock_dst.left     > This->currentDesc.Width)  || (lock_dst.left   < 0) ||
> +        (lock_dst.right    > This->currentDesc.Width)  || (lock_dst.right  < 0) ||
> +        (lock_dst.right    < lock_dst.left)                || (lock_dst.bottom < lock_dst.top)))
This check doesn't look right to me. Something like this should be much closer and
much easier to read and understand. Also it doesn't have any redundant checks:

+    if (IsRectEmpty(&lock_dst) ||
+        lock_dst.left   >= This->currentDesc.Width  || lock_dst.right < 0 ||
+        lock_dst.bottom >= This->currentDesc.Height || lock_dst.top   < 0)

">=" because you comparing coordinates against width/height.

Vitaliy.



More information about the wine-devel mailing list