Only accept partial keys if the timer has not expired, fixes infinite

loop when Escape is pressed the wrong number of times.
pull/1/head
Nicholas Marriott 2013-03-26 14:14:08 +00:00
parent 771d7db3a6
commit dfac36b6c3
1 changed files with 5 additions and 3 deletions

View File

@ -448,7 +448,7 @@ tty_keys_next(struct tty *tty)
const char *buf;
size_t len, size;
cc_t bspace;
int key, delay;
int key, delay, expired = 0;
/* Get key buffer. */
buf = EVBUFFER_DATA(tty->event->input);
@ -508,7 +508,7 @@ first_key:
}
tk = tty_keys_find(tty, buf + 1, len - 1, &size);
if (tk != NULL) {
if (tk != NULL && (!expired || tk->next == NULL)) {
size++; /* include escape */
if (tk->next != NULL)
goto partial_key;
@ -540,8 +540,10 @@ partial_key:
/* If timer is going, check for expiration. */
if (tty->flags & TTY_TIMER) {
if (evtimer_initialized(&tty->key_timer) &&
!evtimer_pending(&tty->key_timer, NULL))
!evtimer_pending(&tty->key_timer, NULL)) {
expired = 1;
goto first_key;
}
return (0);
}