From 8be5dd162c27c15712b0159f87eb2b2075e6382d Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Thu, 17 Apr 2014 18:26:24 +0200 Subject: [PATCH] user32: Check for valid cbSize in GetMonitorInfoA. --- dlls/user32/misc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dlls/user32/misc.c b/dlls/user32/misc.c index 34e1d81ebfe..d9eec26399c 100644 --- a/dlls/user32/misc.c +++ b/dlls/user32/misc.c @@ -419,6 +419,9 @@ BOOL WINAPI GetMonitorInfoA(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo) MONITORINFOEXA *miA = (MONITORINFOEXA*)lpMonitorInfo; BOOL ret; + if((miA->cbSize != sizeof(MONITORINFOEXA)) && (miA->cbSize != sizeof(MONITORINFO))) + return FALSE; + miW.cbSize = sizeof(miW); ret = GetMonitorInfoW(hMonitor, (MONITORINFO*)&miW); @@ -427,7 +430,7 @@ BOOL WINAPI GetMonitorInfoA(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo) miA->rcMonitor = miW.rcMonitor; miA->rcWork = miW.rcWork; miA->dwFlags = miW.dwFlags; - if(miA->cbSize >= offsetof(MONITORINFOEXA, szDevice) + sizeof(miA->szDevice)) + if(miA->cbSize == sizeof(MONITORINFOEXA)) WideCharToMultiByte(CP_ACP, 0, miW.szDevice, -1, miA->szDevice, sizeof(miA->szDevice), NULL, NULL); return ret; }