diff --git a/components/config/prefs.rs b/components/config/prefs.rs index fe169317341..616142eed4d 100644 --- a/components/config/prefs.rs +++ b/components/config/prefs.rs @@ -9,7 +9,7 @@ use std::sync::LazyLock; use embedder_traits::resources::{self, Resource}; use gen::Prefs; -use log::warn; +use log::{error, warn}; use serde_json::{self, Value}; use crate::pref_util::Preferences; @@ -17,7 +17,10 @@ pub use crate::pref_util::{PrefError, PrefValue}; static PREFS: LazyLock> = LazyLock::new(|| { let def_prefs: Prefs = serde_json::from_str(&resources::read_string(Resource::Preferences)) - .expect("Failed to initialize config preferences."); + .unwrap_or_else(|_| { + error!("Preference json file is invalid. Setting Preference to default values"); + Prefs::default() + }); let result = Preferences::new(def_prefs, &gen::PREF_ACCESSORS); for (key, value) in result.iter() { set_stylo_pref_ref(&key, &value); diff --git a/components/net/hsts.rs b/components/net/hsts.rs index d554d744ec9..ebaf6e783bd 100644 --- a/components/net/hsts.rs +++ b/components/net/hsts.rs @@ -10,7 +10,7 @@ use base::cross_process_instant::CrossProcessInstant; use embedder_traits::resources::{self, Resource}; use headers::{HeaderMapExt, StrictTransportSecurity}; use http::HeaderMap; -use log::info; +use log::{error, info}; use net_traits::pub_domains::reg_suffix; use net_traits::IncludeSubdomains; use serde::{Deserialize, Serialize}; @@ -88,7 +88,10 @@ impl HstsList { pub fn from_servo_preload() -> HstsList { let list = resources::read_string(Resource::HstsPreloadList); - HstsList::from_preload(&list).expect("Servo HSTS preload file is invalid") + HstsList::from_preload(&list).unwrap_or_else(|| { + error!("HSTS preload file is invalid. Setting HSTS list to default values"); + HstsList::default() + }) } pub fn is_host_secure(&self, host: &str) -> bool { diff --git a/components/shared/embedder/resources.rs b/components/shared/embedder/resources.rs index 9be7be3f8b7..df27b0fc35c 100644 --- a/components/shared/embedder/resources.rs +++ b/components/shared/embedder/resources.rs @@ -55,9 +55,13 @@ pub fn sandbox_access_files_dirs() -> Vec { } pub enum Resource { + /// A json file of [`Preferences`](servo_config::pref_util::Preferences) configuration. + /// It can be empty but lots of features will be disabled. Preferences, BluetoothBlocklist, DomainList, + /// A preloaded list of HTTP Strict Transport Security. It can be an empty list and + /// [`HstsList::default()`](net::hsts::HstsList) will be called. HstsPreloadList, BadCertHTML, NetErrorHTML, @@ -65,6 +69,12 @@ pub enum Resource { ServoCSS, PresentationalHintsCSS, QuirksModeCSS, + /// A placeholder image to display if we couldn't get the requested image. + /// + /// ## Safety + /// + /// Servo will crash if this is an invalid image. Check `resources/rippy.png` in Servo codebase to see what + /// a default rippy png should look like. RippyPNG, MediaControlsCSS, MediaControlsJS,