From: Alex Henrie Subject: [PATCH v2 9/9] ddraw: Fix memory leak in CreateSurface functions. Message-Id: <20170216034719.12294-9-alexhenrie24@gmail.com> Date: Wed, 15 Feb 2017 20:46:59 -0700 In-Reply-To: <20170216034719.12294-1-alexhenrie24@gmail.com> References: <20170216034719.12294-1-alexhenrie24@gmail.com> Signed-off-by: Alex Henrie --- dlls/ddraw/ddraw.c | 96 +++++++++++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 44 deletions(-) diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index 254dae70eb..5d1e393207 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -2815,6 +2815,18 @@ static HRESULT WINAPI ddraw7_CreateSurface(IDirectDraw7 *iface, DDSURFACEDESC2 * return DDERR_INVALIDPARAMS; } + __TRY + { + *surface = NULL; + } + __EXCEPT_PAGE_FAULT + { + WARN("Application supplied invalid surface pointer\n"); + wined3d_mutex_unlock(); + return DDERR_INVALIDPARAMS; + } + __ENDTRY; + if(surface_desc->ddsCaps.dwCaps & (DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER)) { if (TRACE_ON(ddraw)) @@ -2831,22 +2843,12 @@ static HRESULT WINAPI ddraw7_CreateSurface(IDirectDraw7 *iface, DDSURFACEDESC2 * hr = ddraw_surface_create(ddraw, surface_desc, &impl, outer_unknown, 7); wined3d_mutex_unlock(); - __TRY + if (SUCCEEDED(hr)) { - if (FAILED(hr)) - { - *surface = NULL; - break; - } *surface = &impl->IDirectDrawSurface7_iface; IDirectDraw7_AddRef(iface); impl->ifaceToRelease = (IUnknown *)iface; } - __EXCEPT_PAGE_FAULT - { - hr = E_INVALIDARG; - } - __ENDTRY; return hr; } @@ -2877,6 +2879,18 @@ static HRESULT WINAPI ddraw4_CreateSurface(IDirectDraw4 *iface, return DDERR_INVALIDPARAMS; } + __TRY + { + *surface = NULL; + } + __EXCEPT_PAGE_FAULT + { + WARN("Application supplied invalid surface pointer\n"); + wined3d_mutex_unlock(); + return DDERR_INVALIDPARAMS; + } + __ENDTRY; + if(surface_desc->ddsCaps.dwCaps & (DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER)) { if (TRACE_ON(ddraw)) @@ -2893,22 +2907,12 @@ static HRESULT WINAPI ddraw4_CreateSurface(IDirectDraw4 *iface, hr = ddraw_surface_create(ddraw, surface_desc, &impl, outer_unknown, 4); wined3d_mutex_unlock(); - __TRY + if (SUCCEEDED(hr)) { - if (FAILED(hr)) - { - *surface = NULL; - break; - } *surface = &impl->IDirectDrawSurface4_iface; IDirectDraw4_AddRef(iface); impl->ifaceToRelease = (IUnknown *)iface; } - __EXCEPT_PAGE_FAULT - { - hr = E_INVALIDARG; - } - __ENDTRY; return hr; } @@ -2940,6 +2944,18 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface, return DDERR_INVALIDPARAMS; } + __TRY + { + *surface = NULL; + } + __EXCEPT_PAGE_FAULT + { + WARN("Application supplied invalid surface pointer\n"); + wined3d_mutex_unlock(); + return DDERR_INVALIDPARAMS; + } + __ENDTRY; + DDSD_to_DDSD2(surface_desc, &surface_desc2); if(surface_desc->ddsCaps.dwCaps & (DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER)) { @@ -2957,21 +2973,11 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface, hr = ddraw_surface_create(ddraw, &surface_desc2, &impl, outer_unknown, 2); wined3d_mutex_unlock(); - __TRY + if (SUCCEEDED(hr)) { - if (FAILED(hr)) - { - *surface = NULL; - break; - } *surface = &impl->IDirectDrawSurface_iface; impl->ifaceToRelease = NULL; } - __EXCEPT_PAGE_FAULT - { - hr = E_INVALIDARG; - } - __ENDTRY; return hr; } @@ -3003,6 +3009,18 @@ static HRESULT WINAPI ddraw1_CreateSurface(IDirectDraw *iface, return DDERR_INVALIDPARAMS; } + __TRY + { + *surface = NULL; + } + __EXCEPT_PAGE_FAULT + { + WARN("Application supplied invalid surface pointer\n"); + wined3d_mutex_unlock(); + return DDERR_INVALIDPARAMS; + } + __ENDTRY; + if ((surface_desc->ddsCaps.dwCaps & (DDSCAPS_PRIMARYSURFACE | DDSCAPS_BACKBUFFER)) == (DDSCAPS_PRIMARYSURFACE | DDSCAPS_BACKBUFFER) || (surface_desc->ddsCaps.dwCaps & (DDSCAPS_FLIP | DDSCAPS_FRONTBUFFER)) @@ -3017,21 +3035,11 @@ static HRESULT WINAPI ddraw1_CreateSurface(IDirectDraw *iface, hr = ddraw_surface_create(ddraw, &surface_desc2, &impl, outer_unknown, 1); wined3d_mutex_unlock(); - __TRY + if (SUCCEEDED(hr)) { - if (FAILED(hr)) - { - *surface = NULL; - break; - } *surface = &impl->IDirectDrawSurface_iface; impl->ifaceToRelease = NULL; } - __EXCEPT_PAGE_FAULT - { - hr = E_INVALIDARG; - } - __ENDTRY; return hr; } -- 2.11.1