diff --git a/crates/xlsx/src/styles.rs b/crates/xlsx/src/styles.rs index 68da87790..fdd2ceece 100644 --- a/crates/xlsx/src/styles.rs +++ b/crates/xlsx/src/styles.rs @@ -438,7 +438,7 @@ fn font_xml(f: &Font, dxf: bool, minor: bool) -> String { s.push_str(""); } if !dxf { - let family = f.family.unwrap_or(DEFAULT_FONT_FAMILY); + let family = f.family.filter(|v| *v <= MAX_FONT_FAMILY).unwrap_or(DEFAULT_FONT_FAMILY); let _ = write!(s, "", esc_attr(&f.name)); if let Some(charset) = f.charset { let _ = write!(s, ""); diff --git a/crates/xlsx/src/tests/roundtrip.rs b/crates/xlsx/src/tests/roundtrip.rs index 28213357e..6b8dad43d 100644 --- a/crates/xlsx/src/tests/roundtrip.rs +++ b/crates/xlsx/src/tests/roundtrip.rs @@ -1175,6 +1175,15 @@ fn out_of_range_family_is_ignored() { let mut pkg = Package::open(&saved).unwrap(); let xml = String::from_utf8(pkg.read("xl/styles.xml").unwrap().unwrap()).unwrap(); assert!(xml.contains(""), "{xml}"); + + let mut set_directly = wb.clone(); + let wide = set_directly.styles.derive(StyleId::DEFAULT, |st| st.font.family = Some(200)); + set_directly.sheet_mut(0).unwrap().set_value(CellRef::new(0, 0), Value::text("x")); + set_directly.sheet_mut(0).unwrap().set_style(CellRef::new(0, 0), wide); + let saved = write_xlsx(&set_directly).unwrap(); + let mut pkg = Package::open(&saved).unwrap(); + let xml = String::from_utf8(pkg.read("xl/styles.xml").unwrap().unwrap()).unwrap(); + assert!(!xml.contains(""), "{xml}"); } #[test]