diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index 71ae0805..c8f80eba 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -611,11 +611,14 @@ impl Screen { active_tab.name = String::new(); } "\u{007F}" | "\u{0008}" => { - //delete and backspace keys + // delete and backspace keys active_tab.name.pop(); } c => { - active_tab.name.push_str(c); + // It only allows printable unicode + if buf.iter().all(|u| matches!(u, 0x20..=0x7E)) { + active_tab.name.push_str(c); + } } } self.update_tabs(); diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs index cc83d37c..6818653d 100644 --- a/zellij-server/src/tab/mod.rs +++ b/zellij-server/src/tab/mod.rs @@ -1998,12 +1998,17 @@ impl Tab { pub fn update_active_pane_name(&mut self, buf: Vec, client_id: ClientId) { if let Some(active_terminal_id) = self.get_active_terminal_id(client_id) { - let s = str::from_utf8(&buf).unwrap(); let active_terminal = self .panes .get_mut(&PaneId::Terminal(active_terminal_id)) .unwrap(); - active_terminal.update_name(s); + + // It only allows printable unicode, delete and backspace keys. + let is_updatable = buf.iter().all(|u| matches!(u, 0x20..=0x7E | 0x08 | 0x7F)); + if is_updatable { + let s = str::from_utf8(&buf).unwrap(); + active_terminal.update_name(s); + } } }