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/ob…
==============================================================================
--- 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;
}