From 26f9b7f80c9fc91c4167959121d489a6fcec73e1 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Tue, 27 Oct 2026 10:54:58 +0000 Subject: [PATCH] Reject non-hex characters in Image Trace ignoreColor Found while testing crates/ui-egui/src/panels/image_trace.rs:28-34 (ignore_color) Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/ui-egui/src/panels/image_trace.rs | 2 +- crates/ui-egui/src/panels/image_trace/tests.rs | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/ui-egui/src/panels/image_trace.rs b/crates/ui-egui/src/panels/image_trace.rs index e19b2591b..a20fe12f6 100644 --- a/crates/ui-egui/src/panels/image_trace.rs +++ b/crates/ui-egui/src/panels/image_trace.rs @@ -29,7 +29,7 @@ fn ignore_color(params: &Value) -> [u8; 3] { let hex = params["ignoreColor"].as_str().unwrap_or("").trim_start_matches('#'); let channel = |i: usize| hex.get(i * 2..i * 2 + 2).and_then(|h| u8::from_str_radix(h, 16).ok()); match (hex.len(), channel(0), channel(1), channel(2)) { - (6, Some(r), Some(g), Some(b)) => [r, g, b], + (6, Some(r), Some(g), Some(b)) if hex.bytes().all(|b| b.is_ascii_hexdigit()) => [r, g, b], _ => [255; 3], } } diff --git a/crates/ui-egui/src/panels/image_trace/tests.rs b/crates/ui-egui/src/panels/image_trace/tests.rs index 268c3ab17..3644be39e 100644 --- a/crates/ui-egui/src/panels/image_trace/tests.rs +++ b/crates/ui-egui/src/panels/image_trace/tests.rs @@ -782,3 +782,10 @@ fn panel_and_menu_draw_headless() { out.textures_delta.clear(); } } + +#[test] +fn ignore_color_rejects_signs_in_hex() { + assert_eq!(ignore_color(&json!({"ignoreColor": "#+f+f+f"})), [255; 3]); + assert_eq!(ignore_color(&json!({"ignoreColor": "+0+0+0"})), [255; 3]); + assert_eq!(ignore_color(&json!({"ignoreColor": "#ff00ff"})), [255, 0, 255]); +}