[PATCH 1/1] d3d8: Don't assert on invalid IDirect3DBaseTexture8 interfaces.

Rico Schüller kgbricola at web.de
Mon Apr 15 03:53:39 CDT 2013


On 15.04.2013 10:24, Stefan Dösinger wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Am 2013-04-14 16:53, schrieb Rico Schüller:
>> +    if (iface->lpVtbl != (const IDirect3DBaseTexture8Vtbl
>> *)&Direct3DTexture8_Vtbl +            && iface->lpVtbl != (const
>> IDirect3DBaseTexture8Vtbl *)&Direct3DCubeTexture8_Vtbl +
>> && iface->lpVtbl != (const IDirect3DBaseTexture8Vtbl
>> *)&Direct3DVolumeTexture8_Vtbl) +    { +        WARN("%p is not a
>> valid IDirect3DBaseTexture8 interface.\n", iface); +        return
>> NULL; +    }
> A test would be a good idea.
>
> Are you sure that the assert is the actual problem, and not some
> memory corruption that changes the vtable poiner? What does e.g.
> GetTexture do after a bogous SetTexture call?
>
Well, the app sets an already released texture. As we access some 
members (in this case wined3d_texture) we may get some trouble when the 
memory is reused with some other data as we have the guilty memory still 
bound somewhere in the pipeline.

I'm not sure what GetTexture does, a test might show it (I'll have a 
look). The problem might be, that we use some members, which native 
probably doesn't do in SetTexture. You couldn't call GetTexture in wine 
with uninitialized memory as we do currently, that's why I think using 
NULL is the way to go.

Please have a look at http://bugs.winehq.org/show_bug.cgi?id=33055 . 
Well I think there might be some memory corruption somewhere, but it 
doesn't have anything to do with the this bug as we use already freed 
memory in our implementation.

Cheers
Rico



More information about the wine-devel mailing list