Author: gschneider Date: Sat Aug 8 18:01:24 2009 New Revision: 42520
URL: http://svn.reactos.org/svn/reactos?rev=42520&view=rev Log: Don't access the device mode if it is not passed (user32 monitor crash)
Modified: trunk/reactos/subsystems/win32/win32k/objects/device.c
Modified: trunk/reactos/subsystems/win32/win32k/objects/device.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/obj... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/device.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/objects/device.c [iso-8859-1] Sat Aug 8 18:01:24 2009 @@ -1493,13 +1493,16 @@ return Status; }
- DPRINT("DevMode->dmSize = %d\n", pDevMode->dmSize); - DPRINT("DevMode->dmExtraSize = %d\n", pDevMode->dmDriverExtra); - if (pDevMode->dmSize != SIZEOF_DEVMODEW_300 && - pDevMode->dmSize != SIZEOF_DEVMODEW_400 && - pDevMode->dmSize != SIZEOF_DEVMODEW_500) - { - return STATUS_BUFFER_TOO_SMALL; + if (pDevMode != NULL) + { + DPRINT("DevMode->dmSize = %d\n", pDevMode->dmSize); + DPRINT("DevMode->dmExtraSize = %d\n", pDevMode->dmDriverExtra); + if (pDevMode->dmSize != SIZEOF_DEVMODEW_300 && + pDevMode->dmSize != SIZEOF_DEVMODEW_400 && + pDevMode->dmSize != SIZEOF_DEVMODEW_500) + { + return STATUS_BUFFER_TOO_SMALL; + } }
if (iModeNum == ENUM_CURRENT_SETTINGS) @@ -1695,9 +1698,12 @@
ASSERT(CachedMode != NULL);
- RtlCopyMemory(pDevMode, CachedMode, min(pDevMode->dmSize, CachedMode->dmSize)); - RtlZeroMemory(pDevMode + pDevMode->dmSize, pDevMode->dmDriverExtra); - RtlCopyMemory(pDevMode + min(pDevMode->dmSize, CachedMode->dmSize), CachedMode + CachedMode->dmSize, min(pDevMode->dmDriverExtra, CachedMode->dmDriverExtra)); + if (pDevMode != NULL) + { + RtlCopyMemory(pDevMode, CachedMode, min(pDevMode->dmSize, CachedMode->dmSize)); + RtlZeroMemory(pDevMode + pDevMode->dmSize, pDevMode->dmDriverExtra); + RtlCopyMemory(pDevMode + min(pDevMode->dmSize, CachedMode->dmSize), CachedMode + CachedMode->dmSize, min(pDevMode->dmDriverExtra, CachedMode->dmDriverExtra)); + }
return STATUS_SUCCESS; }