From 7410d78ed496c66a6c1d806360d1f83aa3321c01 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Sat, 23 May 2015 10:51:05 +0200 Subject: console-client: fix binary search Previously, the binary search through the keysym map was incorrectly implemented. This resulted in infinite loops (thanks to the compilers tail call optimization) or crashes (if the stack space was exhausted). * console-client/xkb/kstoucs.c (find_ucs): Fix binary search. --- console-client/xkb/kstoucs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'console-client') diff --git a/console-client/xkb/kstoucs.c b/console-client/xkb/kstoucs.c index 81e71b9b..8471e942 100644 --- a/console-client/xkb/kstoucs.c +++ b/console-client/xkb/kstoucs.c @@ -13,8 +13,10 @@ find_ucs (int keysym, struct ksmap *first, struct ksmap *last) if (middle->keysym == keysym) return middle->ucs; /* base case: needle found. */ - else if (middle == first && middle == last) - return 0; /* base case: empty search space. */ + else if (first == last /* empty search space */ + || keysym < first->keysym /* lookup failure */ + || keysym > last->keysym) /* lookup failure */ + return 0; /* recursive cases: halve search space. */ else if (middle->keysym < keysym) return find_ucs (keysym, middle+1, last); -- cgit v1.2.3