From e6277a399f2eb0320fe0cca72f57d1ba24d2c161 Mon Sep 17 00:00:00 2001 From: Nige Date: Sat, 21 Mar 2026 03:33:09 +0000 Subject: [PATCH] perf(safety): single-pass escape_xml_attr (#1028) * perf(safety): make XML attribute escaping single-pass * test(safety): annotate assertion for no-panics CI * test(safety): inline no-panics suppression comment --- crates/ironclaw_safety/src/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/ironclaw_safety/src/lib.rs b/crates/ironclaw_safety/src/lib.rs index 3e9a48ba..d0c3f783 100644 --- a/crates/ironclaw_safety/src/lib.rs +++ b/crates/ironclaw_safety/src/lib.rs @@ -243,6 +243,18 @@ mod tests { assert!(wrapped.contains("Hello ")); } + #[test] + fn test_wrap_for_llm_escapes_attr_chars() { + let config = SafetyConfig { + max_output_length: 100_000, + injection_check_enabled: true, + }; + let safety = SafetyLayer::new(&config); + + let wrapped = safety.wrap_for_llm("bad&\"<>name", "ok", false); + assert!(wrapped.contains("name=\"bad&"<>name\"")); // safety: test assertion in #[cfg(test)] module + } + #[test] fn test_sanitize_action_forces_sanitization_when_injection_check_disabled() { let config = SafetyConfig {