From 9626ca08f9eef1288cebe2db5adbbd7ce3bc2e7d Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sun, 9 Dec 2007 12:51:50 +0000 Subject: [PATCH] BugFix : Main_DirectDraw_EnumDisplayModes and Main_DirectDraw_EnumDisplayModes4 it did never entry the callbacks loops it was wrong logic check in the begin of the function. This change are base on Kamil Hornicek tykef at atlas dot cz (irc nick : Pigglesworth) patch and once again Thank you Kamil Hornicek tykef at atlas dot cz (irc nick : Pigglesworth) to notice it. and provide a partly fix for it. svn path=/trunk/; revision=31100 --- .../directx/ddraw/Ddraw/ddraw_displaymode.c | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_displaymode.c b/reactos/dll/directx/ddraw/Ddraw/ddraw_displaymode.c index 085eb51a255..4e3cd99c449 100644 --- a/reactos/dll/directx/ddraw/Ddraw/ddraw_displaymode.c +++ b/reactos/dll/directx/ddraw/Ddraw/ddraw_displaymode.c @@ -29,15 +29,19 @@ Main_DirectDraw_EnumDisplayModes(LPDDRAWI_DIRECTDRAW_INT This, DWORD dwFlags, _SEH_TRY { - if - ((!IsBadReadPtr(pCallback,sizeof(LPDDENUMMODESCALLBACK))) || - (!IsBadWritePtr(pCallback,sizeof(LPDDENUMMODESCALLBACK))) || - (!IsBadReadPtr(pDDSD,sizeof(DDSURFACEDESC))) || - (!IsBadWritePtr(pDDSD,sizeof(DDSURFACEDESC)))) + if (pDDSD != NULL) + { + if (pDDSD->dwSize != sizeof(DDSURFACEDESC)) + { + ret = DDERR_INVALIDPARAMS; + } + } + + if (IsBadCodePtr(pCallback)) { ret = DDERR_INVALIDPARAMS; } - else + else if ( ret == DD_OK) { DevMode.dmSize = sizeof(DEVMODE); @@ -123,15 +127,19 @@ Main_DirectDraw_EnumDisplayModes4(LPDDRAWI_DIRECTDRAW_INT This, DWORD dwFlags, _SEH_TRY { - if - ((!IsBadReadPtr(pCallback,sizeof(LPDDENUMMODESCALLBACK2))) || - (!IsBadWritePtr(pCallback,sizeof(LPDDENUMMODESCALLBACK2))) || - (!IsBadReadPtr(pDDSD,sizeof(DDSURFACEDESC2))) || - (!IsBadWritePtr(pDDSD,sizeof(DDSURFACEDESC2)))) + if (pDDSD != NULL) + { + if (pDDSD->dwSize != sizeof(DDSURFACEDESC2)) + { + ret = DDERR_INVALIDPARAMS; + } + } + + if (IsBadCodePtr(pCallback)) { ret = DDERR_INVALIDPARAMS; } - else + else if ( ret == DD_OK) { DevMode.dmSize = sizeof(DEVMODE);