From: Rico Schüller Subject: [PATCH 2/2] wined3d: Add argument check for Stage in IWineD3DDeviceImpl_GetTextureStageState(). Message-Id: <4C8C909F.20709@web.de> Date: Sun, 12 Sep 2010 10:34:39 +0200 --- dlls/wined3d/device.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index c55b101..37d655c 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4281,6 +4281,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTextureStageState(IWineD3DDevice *if static HRESULT WINAPI IWineD3DDeviceImpl_GetTextureStageState(IWineD3DDevice *iface, DWORD Stage, WINED3DTEXTURESTAGESTATETYPE Type, DWORD *pValue) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; + const struct wined3d_gl_info *gl_info = &This->adapter->gl_info; if (Type > WINED3D_HIGHEST_TEXTURE_STATE) { @@ -4288,6 +4289,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetTextureStageState(IWineD3DDevice *if return WINED3D_OK; } + if (Stage >= gl_info->limits.texture_stages) + { + WARN("Attempting to get stage %u which is higher than the max stage %u, ignoring.\n", + Stage, gl_info->limits.texture_stages - 1); + return WINED3D_OK; + } + TRACE("(%p) : requesting Stage %d, Type %d getting %d\n", This, Stage, Type, This->updateStateBlock->textureState[Stage][Type]); *pValue = This->updateStateBlock->textureState[Stage][Type];