pub fn sanitize_for_terminal(value: &str) -> std::borrow::Cow<'_, str> {
if !value.chars().any(char::is_control) {
return std::borrow::Cow::Borrowed(value);
}
std::borrow::Cow::Owned(
value
.chars()
.map(|c| if c.is_control() { '.' } else { c })
.collect(),
)
}
#[cfg(test)]
mod tests {
use super::sanitize_for_terminal;
#[test]
fn clean_input_is_borrowed_unchanged() {
let out = sanitize_for_terminal("printer.local");
assert_eq!(out, "printer.local");
assert!(matches!(out, std::borrow::Cow::Borrowed(_)));
}
#[test]
fn ansi_escape_is_stripped() {
let hostile = "evil\u{1b}[31m\u{1b}[1Aowned";
let out = sanitize_for_terminal(hostile);
assert!(!out.contains('\u{1b}'), "ESC survived: {out:?}");
assert_eq!(out, "evil.[31m.[1Aowned");
}
#[test]
fn newline_and_carriage_return_are_stripped() {
assert_eq!(sanitize_for_terminal("a\nb"), "a.b");
assert_eq!(sanitize_for_terminal("real\rfake"), "real.fake");
assert_eq!(sanitize_for_terminal("a\tb"), "a.b");
}
#[test]
fn osc_52_clipboard_write_is_defused() {
let hostile = "host\u{1b}]52;c;ZWNobyBwd25lZAo=\u{7}";
let out = sanitize_for_terminal(hostile);
assert!(!out.contains('\u{1b}'));
assert!(!out.contains('\u{7}'));
}
#[test]
fn visual_width_is_preserved() {
let hostile = "ab\u{1b}\u{7}cd";
assert_eq!(sanitize_for_terminal(hostile).chars().count(), 6);
}
#[test]
fn unicode_is_left_alone() {
assert_eq!(sanitize_for_terminal("café-über-日本"), "café-über-日本");
}
}