Check for complete keys before escape prefix, allows keys to be defined

with a leading escape. GitHub issue 1048.
pull/1050/merge
nicm 2017-08-29 09:18:48 +00:00
parent fe4467ad2b
commit 9852bd743c
2 changed files with 12 additions and 9 deletions

View File

@ -164,7 +164,7 @@ server_lock_client(struct client *c)
return;
cmd = options_get_string(c->session->options, "lock-command");
if (strlen(cmd) + 1 > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
if (*cmd == '\0' || strlen(cmd) + 1 > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
return;
tty_stop_tty(&c->tty);

View File

@ -595,7 +595,17 @@ tty_keys_next(struct tty *tty)
}
first_key:
/* Handle keys starting with escape. */
/* Try to lookup complete key. */
n = tty_keys_next1(tty, buf, len, &key, &size, expired);
if (n == 0) /* found */
goto complete_key;
if (n == 1)
goto partial_key;
/*
* If not a complete key, look for key with an escape prefix (meta
* modifier).
*/
if (*buf == '\033') {
/* Look for a key without the escape. */
n = tty_keys_next1(tty, buf + 1, len - 1, &key, &size, expired);
@ -620,13 +630,6 @@ first_key:
goto partial_key;
}
/* Try to lookup key. */
n = tty_keys_next1(tty, buf, len, &key, &size, expired);
if (n == 0) /* found */
goto complete_key;
if (n == 1)
goto partial_key;
/*
* At this point, we know the key is not partial (with or without
* escape). So pass it through even if the timer has not expired.