From 5a74392f53dcecfb39c541853ddca427975c7fa3 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Fri, 18 Mar 2016 23:44:15 +0100 Subject: [PATCH] i9e: Replace assertion with warning. The assertion in dispatch_key() can easily be triggered with keys that map to multi-byte sequences. This patch prevents para_play from aborting when such a key is pressed. It now issues a warning message, but no longer aborts. --- interactive.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/interactive.c b/interactive.c index a568d3c5..b72148cc 100644 --- a/interactive.c +++ b/interactive.c @@ -437,6 +437,9 @@ static int dispatch_key(__a_unused int count, __a_unused int key) { int i, ret; +again: + if (i9ep->key_sequence_length == 0) + return 0; for (i = i9ep->num_key_bindings - 1; i >= 0; i--) { if (strcmp(i9ep->key_sequence, i9ep->ici->bound_keyseqs[i])) continue; @@ -445,7 +448,15 @@ static int dispatch_key(__a_unused int count, __a_unused int key) ret = i9ep->ici->key_handler(i); return ret < 0? ret : 0; } - assert(0); + PARA_WARNING_LOG("ignoring key %d\n", i9ep->key_sequence[0]); + /* + * We received an undefined key sequence. Throw away the first byte, + * and try to parse the remainder. + */ + memmove(i9ep->key_sequence, i9ep->key_sequence + 1, + i9ep->key_sequence_length); /* move also terminating zero byte */ + i9ep->key_sequence_length--; + goto again; } /** -- 2.39.5