From b95a7cb84f9bebdd99ac68d30fa8256cc60dc7ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 1 Oct 2023 09:20:13 +0200 Subject: [PATCH] term: get_font_dpi(): don't crash when there aren't any available monitors Seen on plasma; monitor is turned off, and then back on again. Before the "new" output global is emitted, the compositor calls fractional_scale::preferred_scale(). This results in a call to get_font_dpi(), where we crash, since it assumes there is at least one monitor available. Fix by falling back to a DPI of 96. Hopefully closes #1498 --- CHANGELOG.md | 4 ++++ terminal.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f6a26d5..b1c7bb32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -106,11 +106,15 @@ auto-detection ([#1465][1465]). * Crash when `XDG_ACTIVATION_TOKEN` is set, but compositor does not support XDG activation ([#1493][1493]). +* Crash when compositor calls `fractional_scale::preferred_scale()` + when there are no monitors (for example, after a monitor has been + turned off and then back on again) ([#1498][1498]). [1436]: https://codeberg.org/dnkl/foot/issues/1436 [1464]: https://codeberg.org/dnkl/foot/issues/1464 [1465]: https://codeberg.org/dnkl/foot/issues/1465 [1493]: https://codeberg.org/dnkl/foot/pulls/1493 +[1498]: https://codeberg.org/dnkl/foot/issues/1498 ### Security diff --git a/terminal.c b/terminal.c index 1b082100..06f47685 100644 --- a/terminal.c +++ b/terminal.c @@ -826,9 +826,9 @@ get_font_dpi(const struct terminal *term) : &tll_front(term->wl->monitors); if (term_fractional_scaling(term)) - return mon->dpi.physical; + return mon != NULL ? mon->dpi.physical : 96.; else - return mon->dpi.scaled; + return mon != NULL ? mon->dpi.scaled : 96.; } static enum fcft_subpixel