diff options
author | John Ralls <jralls@ceridwen.us> | 2019-01-05 20:02:26 -0800 |
---|---|---|
committer | John Ralls <jralls@ceridwen.us> | 2019-01-05 20:06:50 -0800 |
commit | 70b7b89411690b0c77b4f50fe9072e7160d345f2 (patch) | |
tree | 326f61295700e36674b569033a6fbf92f754fa92 | |
parent | a8e07254d3a793339df9b11847ef487aa2dd1a46 (diff) | |
download | gtk+-70b7b89411690b0c77b4f50fe9072e7160d345f2.tar.gz |
[Quartz]Check mode before setting the monitor scale factor.
CGDisplayModeGetWidth returns 0 if mode is NULL; that happens if the
CGDisplay is offline or mirroring another monitor and it leads to a
divide-by-zero crash.
Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1565
-rw-r--r-- | gdk/quartz/gdkdisplay-quartz.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gdk/quartz/gdkdisplay-quartz.c b/gdk/quartz/gdkdisplay-quartz.c index 165e92bf09..6d6ed0924e 100644 --- a/gdk/quartz/gdkdisplay-quartz.c +++ b/gdk/quartz/gdkdisplay-quartz.c @@ -253,14 +253,16 @@ configure_monitor (GdkMonitor *monitor) monitor->height_mm = height; monitor->geometry = disp_geometry; #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1080 - if (gdk_quartz_osx_version () >= GDK_OSX_MOUNTAIN_LION) + if (mode && gdk_quartz_osx_version () >= GDK_OSX_MOUNTAIN_LION) + { monitor->scale_factor = CGDisplayModeGetPixelWidth (mode) / CGDisplayModeGetWidth (mode); + CGDisplayModeRelease (mode); + } else #endif monitor->scale_factor = 1; monitor->refresh_rate = refresh_rate; monitor->subpixel_layout = GDK_SUBPIXEL_LAYOUT_UNKNOWN; - CGDisplayModeRelease (mode); } static void |