From: Andre Noll Date: Fri, 18 Mar 2016 22:44:15 +0000 (+0100) Subject: i9e: Replace assertion with warning. X-Git-Tag: v0.5.6~4^2 X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=5a74392f53dcecfb39c541853ddca427975c7fa3;p=paraslash.git 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. --- 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; } /**