From e55cbd36de8a9ea7fa27351d6e9539fd021ac26d Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Thu, 13 Apr 2006 06:38:52 +0000 Subject: [PATCH] Bugfix : hal lock surface so it does not crash any longer svn path=/trunk/; revision=21574 --- reactos/dll/directx/ddraw/hal/surface_hal.c | 25 ++++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/reactos/dll/directx/ddraw/hal/surface_hal.c b/reactos/dll/directx/ddraw/hal/surface_hal.c index 7c037169eb5..85f83d7ca94 100644 --- a/reactos/dll/directx/ddraw/hal/surface_hal.c +++ b/reactos/dll/directx/ddraw/hal/surface_hal.c @@ -130,13 +130,26 @@ HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURF OutputDebugStringA("Here ddRVal lock"); return Lock.ddRVal; } - + // FIXME ??? is this right ?? - RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2)); - memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC)); - pDDSD->dwSize = sizeof(DDSURFACEDESC2); - - pDDSD->lpSurface = (LPVOID) Lock.lpSurfData; + if (pDDSD != NULL) + { + if (pDDSD->dwSize == sizeof(DDSURFACEDESC2)) + { + RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2)); + // FIXME the interanl mddsdPrimary shall be DDSURFACEDESC2 + memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC2); + } + if (pDDSD->dwSize == sizeof(DDSURFACEDESC)) + { + RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC)); + memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + + pDDSD->lpSurface = (LPVOID) Lock.lpSurfData; + } return DD_OK; }