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.
This commit is contained in:
tokyo4j 2025-01-06 04:16:37 +09:00 committed by Hiroaki Yamamoto
parent b58f8dab21
commit cacf11fc90

View file

@ -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;
}
}
}