From 6a57ed804a37a3697c1ba9af8caccc2f6a212145 Mon Sep 17 00:00:00 2001 From: Zhiyi Zhang Date: Thu, 17 Nov 2022 15:46:52 +0800 Subject: [PATCH] dwmapi: Fallback to 60Hz if the display frequency is invalid in get_display_frequency(). DwmGetCompositionTimingInfo() may throw a zero division exception if the display reports a 0Hz frequency, which can happen when testing under Xephyr without -fakescreenfps option. --- dlls/dwmapi/dwmapi_main.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c index 1a65410c7eb..56730f79cac 100644 --- a/dlls/dwmapi/dwmapi_main.c +++ b/dlls/dwmapi/dwmapi_main.c @@ -213,12 +213,16 @@ HRESULT WINAPI DwmRegisterThumbnail(HWND dest, HWND src, PHTHUMBNAIL thumbnail_i static int get_display_frequency(void) { - DEVMODEA mode; + DEVMODEW mode; + BOOL ret; memset(&mode, 0, sizeof(mode)); mode.dmSize = sizeof(mode); - if (EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &mode)) + ret = EnumDisplaySettingsExW(NULL, ENUM_CURRENT_SETTINGS, &mode, 0); + if (ret && mode.dmFields & DM_DISPLAYFREQUENCY && mode.dmDisplayFrequency) + { return mode.dmDisplayFrequency; + } else { WARN("Failed to query display frequency, returning a fallback value.\n");