From: Stefan Dösinger Subject: [PATCH 1/2] ddraw: Clear application-passed lpSurface pointers. Message-Id: <1408450829-2058-1-git-send-email-stefan@codeweavers.com> Date: Tue, 19 Aug 2014 14:20:28 +0200 Dungeon Keeper 2 passes lpSurface != NULL without setting DDSD_LPSURFACE. The app-passed pointer points to invalid memory. GetSurfaceDesc always returns lpSurface = NULL even if the surface uses user memory. --- dlls/ddraw/surface.c | 1 + dlls/ddraw/tests/ddraw1.c | 1 + dlls/ddraw/tests/ddraw2.c | 1 + dlls/ddraw/tests/ddraw4.c | 1 + dlls/ddraw/tests/ddraw7.c | 1 + 5 files changed, 5 insertions(+) diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index fd2c1a4..afd98a1 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -6224,6 +6224,7 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, s desc->u1.lPitch = wined3d_surface_get_pitch(wined3d_surface); } } + desc->lpSurface = NULL; wined3d_surface_incref(wined3d_surface); surface->wined3d_surface = wined3d_surface; diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index ad60606..ccb65ac 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -4576,6 +4576,7 @@ static void test_create_surface_pitch(void) ok(U1(surface_desc).lPitch == test_data[i].pitch_out32, "Test %u: Got unexpected pitch %u, expected %u.\n", i, U1(surface_desc).lPitch, test_data[i].pitch_out32); + ok(!surface_desc.lpSurface, "Test %u: Got unexpected lpSurface %p.\n", i, surface_desc.lpSurface); IDirectDrawSurface_Release(surface); } diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 7e0e925..d8be62f 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -5652,6 +5652,7 @@ static void test_create_surface_pitch(void) ok(U1(surface_desc).lPitch == test_data[i].pitch_out32, "Test %u: Got unexpected pitch %u, expected %u.\n", i, U1(surface_desc).lPitch, test_data[i].pitch_out32); + ok(!surface_desc.lpSurface, "Test %u: Got unexpected lpSurface %p.\n", i, surface_desc.lpSurface); IDirectDrawSurface_Release(surface); } diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index b96330c..9bcebc5 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -6649,6 +6649,7 @@ static void test_create_surface_pitch(void) ok(U1(surface_desc).lPitch == test_data[i].pitch_out32, "Test %u: Got unexpected pitch %u, expected %u.\n", i, U1(surface_desc).lPitch, test_data[i].pitch_out32); + ok(!surface_desc.lpSurface, "Test %u: Got unexpected lpSurface %p.\n", i, surface_desc.lpSurface); IDirectDrawSurface4_Release(surface); } diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 3e29164..4625b0f 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -6472,6 +6472,7 @@ static void test_create_surface_pitch(void) ok(U1(surface_desc).lPitch == test_data[i].pitch_out32, "Test %u: Got unexpected pitch %u, expected %u.\n", i, U1(surface_desc).lPitch, test_data[i].pitch_out32); + ok(!surface_desc.lpSurface, "Test %u: Got unexpected lpSurface %p.\n", i, surface_desc.lpSurface); IDirectDrawSurface7_Release(surface); } -- 1.8.5.5