From cacf11fc90d48635d28c053a1dea986b00041db5 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Mon, 6 Jan 2025 04:16:37 +0900 Subject: [PATCH] set: prevent possible segfault when keycode 0 is released lab_set_remove() didn't expect keycode 0 as the first branch (set->values[i] == value) was taken over and over. --- src/common/set.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/common/set.c b/src/common/set.c index ccaa6c49..64df2717 100644 --- a/src/common/set.c +++ b/src/common/set.c @@ -29,16 +29,11 @@ lab_set_add(struct lab_set *set, uint32_t value) void lab_set_remove(struct lab_set *set, uint32_t value) { - bool shifting = false; - - for (int i = 0; i < LAB_SET_MAX_SIZE; ++i) { + for (int i = 0; i < set->size; ++i) { if (set->values[i] == value) { --set->size; - shifting = true; - } - if (shifting) { - set->values[i] = i < LAB_SET_MAX_SIZE - 1 - ? set->values[i + 1] : 0; + set->values[i] = set->values[set->size]; + return; } } }