]> git.mdlowis.com Git - proto/labwc.git/commitdiff
set: prevent possible segfault when keycode 0 is released
authortokyo4j <hrak1529@gmail.com>
Sun, 5 Jan 2025 19:16:37 +0000 (04:16 +0900)
committerHiroaki Yamamoto <hrak1529@gmail.com>
Mon, 6 Jan 2025 05:50:14 +0000 (14:50 +0900)
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

index ccaa6c49bdc30391227b9c4d39fa9dc96454c7c0..64df2717bcdd0dbe6c1aa12ee954e9eeb71a9b5b 100644 (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;
                }
        }
 }