curses backends: don't crash on weird input

This commit is contained in:
Alexandre Bury 2018-02-20 11:18:02 -08:00
parent 2cae042a85
commit beefac9c6a
2 changed files with 18 additions and 14 deletions

View File

@ -266,10 +266,12 @@ impl backend::Backend for Concrete {
// Is it a UTF-8 starting point? // Is it a UTF-8 starting point?
if 32 <= ch && ch <= 255 && ch != 127 { if 32 <= ch && ch <= 255 && ch != 127 {
Event::Char( utf8::read_char(ch as u8, || Some(ncurses::getch() as u8))
utf8::read_char(ch as u8, || Some(ncurses::getch() as u8)) .map(Event::Char)
.unwrap(), .unwrap_or_else(|e| {
) warn!("Error reading input: {}", e);
Event::Unknown(vec![ch as u8])
})
} else { } else {
self.parse_ncurses_char(ch) self.parse_ncurses_char(ch)
} }

View File

@ -241,16 +241,18 @@ impl backend::Backend for Concrete {
pancurses::Input::Character(c) pancurses::Input::Character(c)
if 32 <= (c as u32) && (c as u32) <= 255 => if 32 <= (c as u32) && (c as u32) <= 255 =>
{ {
Event::Char( utf8::read_char(c as u8, || {
utf8::read_char(c as u8, || { self.window.getch().and_then(|i| match i {
self.window.getch().and_then(|i| match i { pancurses::Input::Character(c) => {
pancurses::Input::Character(c) => { Some(c as u8)
Some(c as u8) }
} _ => None,
_ => None, })
}) }).map(Event::Char)
}).unwrap(), .unwrap_or_else(|e| {
) warn!("Error reading input: {}", e);
Event::Unknown(vec![c as u8])
})
} }
pancurses::Input::Character(c) if (c as u32) <= 26 => { pancurses::Input::Character(c) if (c as u32) <= 26 => {
Event::CtrlChar((b'a' - 1 + c as u8) as char) Event::CtrlChar((b'a' - 1 + c as u8) as char)