Module: wine Branch: master Commit: 699b52dc46c44f08873d6952b6cebdf9534c1802 URL: https://gitlab.winehq.org/wine/wine/-/commit/699b52dc46c44f08873d6952b6cebdf... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Tue Mar 21 20:00:29 2023 +0100 d3dcompiler: Fix bytecode buffer leaks in D3DCompile2(). --- dlls/d3dcompiler_43/compiler.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/dlls/d3dcompiler_43/compiler.c b/dlls/d3dcompiler_43/compiler.c index 3f302f23503..a7926785184 100644 --- a/dlls/d3dcompiler_43/compiler.c +++ b/dlls/d3dcompiler_43/compiler.c @@ -556,17 +556,21 @@ HRESULT WINAPI D3DCompile2(const void *data, SIZE_T data_size, const char *filen vkd3d_shader_free_messages(messages); } - if (!ret && shader_blob) + if (ret) + return hresult_from_vkd3d_result(ret); + + if (!shader_blob) { - if (FAILED(hr = D3DCreateBlob(byte_code.size, shader_blob))) - { - vkd3d_shader_free_shader_code(&byte_code); - return hr; - } - memcpy(ID3D10Blob_GetBufferPointer(*shader_blob), byte_code.code, byte_code.size); + vkd3d_shader_free_shader_code(&byte_code); + return S_OK; } - return hresult_from_vkd3d_result(ret); + if (SUCCEEDED(hr = D3DCreateBlob(byte_code.size, shader_blob))) + memcpy(ID3D10Blob_GetBufferPointer(*shader_blob), byte_code.code, byte_code.size); + + vkd3d_shader_free_shader_code(&byte_code); + + return hr; } HRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename,