From 67ac09ab2e90ad7e32d9a6478ebd4daef49165b9 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 21baf89b..dcfcb4f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -80,6 +80,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 ffbd7b34..c0fc3522 100644 --- a/input.c +++ b/input.c @@ -580,6 +580,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},