[PATCH 1/2] ddraw: Clear application-passed lpSurface pointers.
Stefan Dösinger
stefan at codeweavers.com
Tue Aug 19 07:20:28 CDT 2014
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
More information about the wine-patches
mailing list