From b2a3cdb7230e0740dc1e476f1e0a6c6b62302836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 16 Jan 2021 12:27:58 +0100 Subject: [PATCH] =?UTF-8?q?input:=20don=E2=80=99t=20enable=20keyboard=20re?= =?UTF-8?q?peat=20timer=20when=20repeat=20rate=20is=20zero?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wayland-client-protocol.h: Negative values for either rate or delay are illegal. A rate of zero will disable any repeating (regardless of the value of delay). This fixes a division-by-zero crash. --- CHANGELOG.md | 1 + input.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8acc6666..ff7e943a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ (https://codeberg.org/dnkl/foot/issues/291). * Sixel “current geometry” query response not being bounded by the current window dimensions (fixes `lsix` output) +* Crash on keyboard input when repeat rate was zero (i.e. no repeat). ### Security diff --git a/input.c b/input.c index 205d7559..6d260291 100644 --- a/input.c +++ b/input.c @@ -569,6 +569,9 @@ start_repeater(struct seat *seat, uint32_t key) if (seat->kbd.repeat.dont_re_repeat) return true; + if (seat->kbd.repeat.rate == 0) + return true; + struct itimerspec t = { .it_value = {.tv_sec = 0, .tv_nsec = seat->kbd.repeat.delay * 1000000}, .it_interval = {.tv_sec = 0, .tv_nsec = 1000000000 / seat->kbd.repeat.rate},