Bug 1442195 - Don't crash when finding an unexpected default font type. r=xidorn, a=RyanVM
authorEmilio Cobos Álvarez <emilio@crisal.io>
Mon, 14 May 2018 15:19:34 +0200
changeset 473330 dee67f5780bf85a02e8ec5b40dac24391dcd018d
parent 473329 9c5f236d1dd40bb2b5478ed69104c9785b7caa1c
child 473331 9c083d037ce2528c1914c683902c0198afb7cd25
push id1728
push userjlund@mozilla.com
push dateMon, 18 Jun 2018 21:12:27 +0000
treeherdermozilla-release@c296fde26f5f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersxidorn, RyanVM
bugs1442195
milestone61.0
Bug 1442195 - Don't crash when finding an unexpected default font type. r=xidorn, a=RyanVM For now just return sans-serif, though as the FIXME comment indicates we should probably just carry around the font-name instead. MozReview-Commit-ID: CIPbV3R5Ul
servo/components/style/properties/gecko.mako.rs
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -2330,24 +2330,35 @@ fn static_assert() {
     pub fn clone_font_family(&self) -> longhands::font_family::computed_value::T {
         use gecko_bindings::structs::FontFamilyType;
         use values::computed::font::{FontFamily, SingleFontFamily, FontFamilyList};
 
         let fontlist = &self.gecko.mFont.fontlist;
         let shared_fontlist = unsafe { fontlist.mFontlist.mBasePtr.to_safe() };
 
         if shared_fontlist.mNames.is_empty() {
-            let default = match fontlist.mDefaultFontType {
+            let default = fontlist.mDefaultFontType;
+            let default = match default {
                 FontFamilyType::eFamily_serif => {
                     SingleFontFamily::Generic(atom!("serif"))
                 }
-                FontFamilyType::eFamily_sans_serif => {
+                _ => {
+                    // This can break with some combinations of user prefs, see
+                    // bug 1442195 for example. It doesn't really matter in this
+                    // case...
+                    //
+                    // FIXME(emilio): Probably should be storing the whole
+                    // default font name instead though.
+                    debug_assert_eq!(
+                        default,
+                        FontFamilyType::eFamily_sans_serif,
+                        "Default generic should be serif or sans-serif"
+                    );
                     SingleFontFamily::Generic(atom!("sans-serif"))
                 }
-                _ => panic!("Default generic must be serif or sans-serif"),
             };
             FontFamily(FontFamilyList::new(Box::new([default])))
         } else {
             FontFamily(FontFamilyList(shared_fontlist))
         }
     }
 
     pub fn unzoom_fonts(&mut self, device: &Device) {