[PATCH 4/6] winex11.drv: Zero initialize DEVMODE before passing it to EnumDisplaySettings().

Zhiyi Zhang zzhang at codeweavers.com
Tue Aug 11 05:16:06 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/winex11.drv/settings.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/dlls/winex11.drv/settings.c b/dlls/winex11.drv/settings.c
index a64d1de6500..2d1fc7220de 100644
--- a/dlls/winex11.drv/settings.c
+++ b/dlls/winex11.drv/settings.c
@@ -501,6 +501,7 @@ static LONG get_display_settings(struct x11drv_display_setting **new_displays,
 
         if (!dev_mode)
         {
+            memset(&registry_mode, 0, sizeof(registry_mode));
             registry_mode.dmSize = sizeof(registry_mode);
             if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_REGISTRY_SETTINGS, &registry_mode, 0))
                 goto done;
@@ -512,6 +513,7 @@ static LONG get_display_settings(struct x11drv_display_setting **new_displays,
             displays[display_idx].desired_mode = *dev_mode;
             if (!(dev_mode->dmFields & DM_POSITION))
             {
+                memset(&current_mode, 0, sizeof(current_mode));
                 current_mode.dmSize = sizeof(current_mode);
                 if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_CURRENT_SETTINGS, &current_mode, 0))
                     goto done;
@@ -522,6 +524,7 @@ static LONG get_display_settings(struct x11drv_display_setting **new_displays,
         }
         else
         {
+            memset(&current_mode, 0, sizeof(current_mode));
             current_mode.dmSize = sizeof(current_mode);
             if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_CURRENT_SETTINGS, &current_mode, 0))
                 goto done;
-- 
2.25.1




More information about the wine-devel mailing list