[PATCH 3/6] user32: Zero initialize DEVMODE before passing it to EnumDisplaySettings().

Zhiyi Zhang zzhang at codeweavers.com
Tue Aug 11 05:15:55 CDT 2020


EnumDisplaySettings() on Wine does not write beyond the end of DEVMODE because it doesn't use
dmDriverExtra currently, but this implementation detail should not be relied on.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
 dlls/user32/sysparams.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 79f938a3c20..0c0f8fac5d1 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -3369,6 +3369,7 @@ LONG WINAPI ChangeDisplaySettingsExW( LPCWSTR devname, LPDEVMODEW devmode, HWND
 
     if (def_mode)
     {
+        memset(&dm, 0, sizeof(dm));
         dm.dmSize = sizeof(dm);
         if (!EnumDisplaySettingsExW(devname, ENUM_REGISTRY_SETTINGS, &dm, 0))
         {
@@ -3428,6 +3429,8 @@ BOOL WINAPI EnumDisplaySettingsExA(LPCSTR lpszDeviceName, DWORD iModeNum,
     if (lpszDeviceName) RtlCreateUnicodeStringFromAsciiz(&nameW, lpszDeviceName);
     else nameW.Buffer = NULL;
 
+    memset(&devmodeW, 0, sizeof(devmodeW));
+    devmodeW.dmSize = sizeof(devmodeW);
     ret = EnumDisplaySettingsExW(nameW.Buffer,iModeNum,&devmodeW,dwFlags);
     if (ret)
     {
@@ -4808,6 +4811,7 @@ LONG WINAPI QueryDisplayConfig(UINT32 flags, UINT32 *numpathelements, DISPLAYCON
                                        &type, (BYTE *)device_name, sizeof(device_name), NULL, 0))
             goto done;
 
+        memset(&devmode, 0, sizeof(devmode));
         devmode.dmSize = sizeof(devmode);
         if (!EnumDisplaySettingsW(device_name, ENUM_CURRENT_SETTINGS, &devmode))
             goto done;
-- 
2.25.1




More information about the wine-devel mailing list