[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