From b97187c90b5a12624e6c5acdea772cabdbcf61d6 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Sun, 7 Apr 2024 08:26:45 +0200 Subject: [PATCH] Fix crash displaying CSI u codepoints in ASCII control range --- src/key.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/key.rs b/src/key.rs index 36cd4de66..2d9d692eb 100644 --- a/src/key.rs +++ b/src/key.rs @@ -414,8 +414,11 @@ fn ascii_printable_to_symbol(buf: &mut WString, c: char) { fn char_to_symbol(c: char) -> WString { let mut buff = WString::new(); let buf = &mut buff; - assert!(c >= ' '); - if c < '\u{80}' { + if c <= ' ' { + // Most ascii control characters like \x01 are canonicalized like ctrl-a, except if we + // are given the control character directly with CSI u. + sprintf!(=> buf, "\\x%02x", u8::try_from(c).unwrap()); + } else if c < '\u{80}' { // ASCII characters that are not control characters ascii_printable_to_symbol(buf, c); } else if fish_wcwidth(c) > 0 {