Module: wine Branch: master Commit: 0a12107604859f04fdab75eff8240a790221d085 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0a12107604859f04fdab75eff8...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Tue Apr 28 20:30:54 2015 +0200
d3d10core: Don't use potentially uninitialized data in the depth/stencil state key (Valgrind).
---
dlls/d3d10core/device.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index d8b3d7e..3ba87b4 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -1744,6 +1744,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateDepthStencilState(ID3D10Devi { struct d3d10_device *device = impl_from_ID3D10Device(iface); struct d3d10_depthstencil_state *object; + D3D10_DEPTH_STENCIL_DESC tmp_desc; struct wine_rb_entry *entry; HRESULT hr;
@@ -1752,7 +1753,19 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateDepthStencilState(ID3D10Devi if (!desc) return E_INVALIDARG;
- if ((entry = wine_rb_get(&device->depthstencil_states, desc))) + /* D3D10_DEPTH_STENCIL_DESC has a hole, which is a problem because we use + * it as a key in the rbtree. */ + memset(&tmp_desc, 0, sizeof(tmp_desc)); + tmp_desc.DepthEnable = desc->DepthEnable; + tmp_desc.DepthWriteMask = desc->DepthWriteMask; + tmp_desc.DepthFunc = desc->DepthFunc; + tmp_desc.StencilEnable = desc->StencilEnable; + tmp_desc.StencilReadMask = desc->StencilReadMask; + tmp_desc.StencilWriteMask = desc->StencilWriteMask; + tmp_desc.FrontFace = desc->FrontFace; + tmp_desc.BackFace = desc->BackFace; + + if ((entry = wine_rb_get(&device->depthstencil_states, &tmp_desc))) { object = WINE_RB_ENTRY_VALUE(entry, struct d3d10_depthstencil_state, entry);
@@ -1767,7 +1780,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateDepthStencilState(ID3D10Devi if (!object) return E_OUTOFMEMORY;
- if (FAILED(hr = d3d10_depthstencil_state_init(object, device, desc))) + if (FAILED(hr = d3d10_depthstencil_state_init(object, device, &tmp_desc))) { WARN("Failed to initialize depthstencil state, hr %#x.\n", hr); HeapFree(GetProcessHeap(), 0, object);