From 53eda1e8dfc62e809705b11963282554c27cd0e3 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Sat, 24 Oct 2026 14:21:11 +0200 Subject: [PATCH] Reject multiple leading '#' in Rgba::from_hex Found while testing crates/color/src/lib.rs:37 Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/color/src/lib.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/color/src/lib.rs b/crates/color/src/lib.rs index fe02a975..9d8f6fc6 100644 --- a/crates/color/src/lib.rs +++ b/crates/color/src/lib.rs @@ -34,7 +34,8 @@ impl Rgba { } /// `RRGGBB` or `#RRGGBB` (also `RRGGBBAA`). pub fn from_hex(s: &str) -> Option { - let s = s.trim().trim_start_matches('#'); + let s = s.trim(); + let s = s.strip_prefix('#').unwrap_or(s); if !s.bytes().all(|b| b.is_ascii_hexdigit()) { return None; } @@ -519,6 +520,15 @@ pub fn preset(name: &str) -> Option { mod tests { use super::*; + #[test] + fn from_hex_rejects_multiple_hashes() { + assert_eq!(Rgba::from_hex("##FF0000"), None); + assert_eq!(Rgba::from_hex("####FF0000"), None); + assert_eq!(Rgba::from_hex("#FF0000"), Some(Rgba::rgb(255, 0, 0))); + assert_eq!(Rgba::from_hex("FF0000"), Some(Rgba::rgb(255, 0, 0))); + assert_eq!(Rgba::from_hex("#FF000080"), Some(Rgba::rgba(255, 0, 0, 128))); + } + #[test] fn from_hex_rejects_signs() { assert_eq!(Rgba::from_hex("+12345"), None);