Module: wine Branch: master Commit: 440fab3870b3c9ea778031ec51db69f8c3a687f5 URL: https://source.winehq.org/git/wine.git/?a=commit;h=440fab3870b3c9ea778031ec5...
Author: Zhiyi Zhang zzhang@codeweavers.com Date: Tue Aug 11 18:16:06 2020 +0800
winex11.drv: Zero initialize DEVMODE before passing it to EnumDisplaySettings().
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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 a64d1de650..2d1fc7220d 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(®istry_mode, 0, sizeof(registry_mode)); registry_mode.dmSize = sizeof(registry_mode); if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_REGISTRY_SETTINGS, ®istry_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(¤t_mode, 0, sizeof(current_mode)); current_mode.dmSize = sizeof(current_mode); if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_CURRENT_SETTINGS, ¤t_mode, 0)) goto done; @@ -522,6 +524,7 @@ static LONG get_display_settings(struct x11drv_display_setting **new_displays, } else { + memset(¤t_mode, 0, sizeof(current_mode)); current_mode.dmSize = sizeof(current_mode); if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_CURRENT_SETTINGS, ¤t_mode, 0)) goto done;