wayland: force monitor DPI to 96 when it’s unreasonably high

If an output has a bogus physical width or height, the DPI can become
so high that the cell width/height is too large for
pixman_image_fill_rectangles(), resulting in a crash in pixman_fill().

Since it doesn’t make any sense to use a DPI that is obviously bogus,
don’t. Force it 96 instead.
This commit is contained in:
Daniel Eklöf 2022-11-04 17:45:43 +01:00
parent 2910ca354c
commit 42c6af0914
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 9 additions and 0 deletions

View file

@ -64,6 +64,7 @@
("permanently reset") instead of `2` ("reset") for DEC private
modes that are known but unsupported.
* Set `PWD` environment variable in the slave process ([#1179][1179]).
* DPI is now forced to 96 when found to be unreasonably high.
[1166]: https://codeberg.org/dnkl/foot/issues/1166
[1179]: https://codeberg.org/dnkl/foot/issues/1179

View file

@ -409,6 +409,14 @@ output_update_ppi(struct monitor *mon)
double px_diag = sqrt(pow(scaled_width, 2) + pow(scaled_height, 2));
mon->dpi = px_diag / mon->inch * mon->scale;
if (mon->dpi > 1000) {
if (mon->name != NULL) {
LOG_WARN("%s: DPI=%f is unreasonable, using 96 instead",
mon->name, mon->dpi);
}
mon->dpi = 96;
}
}
static void