On Wed, Jun 23, 2010 at 10:47 AM, Stefan Dösinger <[email protected]> wrote: > Am Mittwoch 23 Juni 2010 10:40:30 schrieb Stefan Dösinger: >> You're catching only the GDI surface case here since opengl surfaces don't >> use IWineD3DBaseSurfaceImpl_BltFast. I recommend to put this check into >> ddraw, like in your previous attempts(but keep checking for < 0, don't do >> any bit testing magic like in your old patches)
I'd hope that the opengl implementation also has some checking of its own. I did the nasty bit twiddling to avoid making any assumptions about equivalence of types (is it always safe to assume that DWORD can be cast as a LONG?). And gcc optimizes dstx < 0 away as "comparison of unsigned expression < 0 is always false". >> Am Dienstag 22 Juni 2010 23:37:20 schrieb Iain Arnell: >> > Scratch this - after thinking again about Henri's hint, I've moved the >> > fix to wined3d. > I searched the archives to see if I missed any of Henri's suggestions but I > couldn't find any like that. My consideration is that ddraw already has the > other range checks, so it would just be consistent to keep it there. besides, > in many situations ddraw, d3d8 and d3d9 have different checks or behavior in > case of wrong parameters(see for example surface locking) > > (ok, the latter is somewhat academic since only ddraw calls BltFast directly) Henri's magic words were simply "integer overflow". So I looked for the point where this actually happens. And I could make the same argument for making the check in wined3d - it also makes a whole bunch of range checks. But, of course, I'm willing to bow to your better judgement. -- Iain.
