From 4a22724cb89644fcfd90dbd0cf8116818e27d07f Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Wed, 17 Jul 2024 14:53:22 +0200 Subject: [PATCH] kms: HACK: avoid crashing on bad edids --- src/backend/kms/drm_helpers.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/backend/kms/drm_helpers.rs b/src/backend/kms/drm_helpers.rs index 1464ae3f..496c6ca8 100644 --- a/src/backend/kms/drm_helpers.rs +++ b/src/backend/kms/drm_helpers.rs @@ -9,7 +9,11 @@ use smithay::reexports::drm::control::{ property, AtomicCommitFlags, Device as ControlDevice, Mode, ModeFlags, PlaneType, ResourceHandle, }; -use std::{collections::HashMap, ops::Range}; +use std::{ + collections::HashMap, + ops::Range, + panic::{catch_unwind, AssertUnwindSafe}, +}; pub fn display_configuration( device: &mut impl ControlDevice, @@ -183,7 +187,11 @@ pub fn edid_info(device: &impl ControlDevice, connector: connector::Handle) -> R if let property::Value::Blob(edid_blob) = edid_info.value_type().convert_value(val) { let blob = device.get_property_blob(edid_blob)?; let mut reader = std::io::Cursor::new(blob); - if let Some(edid) = edid_parse(&mut reader).ok() { + if let Some(edid) = + catch_unwind(AssertUnwindSafe(move || edid_parse(&mut reader).ok())) + .ok() + .flatten() + { manufacturer = { let id = edid.product.manufacturer_id; let code = [id.0, id.1, id.2];