From 6222fce8d13289dc30f909df17b3ae3f913bfeb0 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:22:45 +0000 Subject: [PATCH] Reject signs and exponents in ExportSize::parse Found while testing crates/doc/src/props.rs:1394 (ExportSize::parse, `num.parse::()`) Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/doc/src/props.rs | 4 ++++ crates/engine/src/import_export_tests.rs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/doc/src/props.rs b/crates/doc/src/props.rs index 99b9d9c39..15d557d88 100644 --- a/crates/doc/src/props.rs +++ b/crates/doc/src/props.rs @@ -1399,6 +1399,10 @@ impl ExportSize { Some((i, c)) if c.is_ascii_alphabetic() => (s.get(..i)?.trim(), Some(c)), _ => (s.as_str(), None), }; + // Plain decimal only: no sign, exponent, "inf" or "nan". + if !num.bytes().all(|b| b.is_ascii_digit() || b == b'.') { + return None; + } let value: f64 = num.parse().ok()?; match unit { None | Some('x') => ExportSize::Scale { value }, diff --git a/crates/engine/src/import_export_tests.rs b/crates/engine/src/import_export_tests.rs index 4acc86216..fdc8b29d4 100644 --- a/crates/engine/src/import_export_tests.rs +++ b/crates/engine/src/import_export_tests.rs @@ -283,7 +283,7 @@ fn export_sizes_parse_and_label() { assert_eq!(ExportSize::parse(text), Some(want), "{text}"); assert_eq!(ExportSize::parse(&want.label()), Some(want)); } - for bad in ["", "x", "0x", "-1x", "NaNx", "infx", "65x", "20000w", "2q", "2xx"] { + for bad in ["", "x", "0x", "-1x", "NaNx", "infx", "65x", "20000w", "2q", "2xx", "+2x", "+512w", "2e0x", "2E0x", "+0.5x"] { assert_eq!(ExportSize::parse(bad), None, "{bad}"); } let e = |size, suffix: &str, format| ExportSetting { size, suffix: suffix.into(), format, ..Default::default() };