From dd8f25a9409432965b773bcddd363c469b188dd5 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 20 May 2008 14:57:37 +0000 Subject: [PATCH] - zero DISPLAY_DEVICEW struct before passing it to NtUserEnumDisplayDevices - copy string the resulting strings on success but on failure - fix 2 memory leaks in EnumDisplayMonitors - fixes a user32_winetest error svn path=/trunk/; revision=33612 --- reactos/dll/win32/user32/misc/display.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/user32/misc/display.c b/reactos/dll/win32/user32/misc/display.c index 67527a6fa9d..ec2e398965c 100644 --- a/reactos/dll/win32/user32/misc/display.c +++ b/reactos/dll/win32/user32/misc/display.c @@ -62,13 +62,14 @@ EnumDisplayDevicesA( return FALSE; } + RtlZeroMemory(&DisplayDeviceW, sizeof(DISPLAY_DEVICEW)); DisplayDeviceW.cb = sizeof(DISPLAY_DEVICEW); rc = NtUserEnumDisplayDevices ( &Device, iDevNum, &DisplayDeviceW, dwFlags ); - if (!rc) + if (rc) { /* Copy result from DisplayDeviceW to lpDisplayDevice */ lpDisplayDevice->StateFlags = DisplayDeviceW.StateFlags; @@ -169,6 +170,8 @@ EnumDisplayMonitors( if (iCount <= 0) { /* FIXME: SetLastError() */ + HeapFree(hHeap, 0, hMonitorList); + HeapFree(hHeap, 0, pRectList); return FALSE; } @@ -188,7 +191,8 @@ EnumDisplayMonitors( if (!lpfnEnum(hMonitor, hMonitorDC, pMonitorRect, dwData)) break; } - + HeapFree(hHeap, 0, hMonitorList); + HeapFree(hHeap, 0, pRectList); return TRUE; }