From 6760e006ecb183f010a4892b30f7a43560ee56e8 Mon Sep 17 00:00:00 2001 From: Mouhand-Kaddo Date: Mon, 19 Oct 2026 20:56:14 +0400 Subject: [PATCH] M12.AR15: never write a font family over 14 (review) --- crates/xlsx/src/styles.rs | 2 +- crates/xlsx/src/tests/roundtrip.rs | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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]