seat: guard against button count corruption

This is still a compositor bug, and bad events will be sent to clients. We'll
need to track each button separately to handle this in wlroots.
This commit is contained in:
emersion 2019-02-28 18:58:02 +01:00 committed by Brian Ashworth
parent f8fcd7f06a
commit 4135fafecd

View file

@ -346,7 +346,11 @@ uint32_t wlr_seat_pointer_notify_button(struct wlr_seat *wlr_seat,
} }
wlr_seat->pointer_state.button_count++; wlr_seat->pointer_state.button_count++;
} else { } else {
wlr_seat->pointer_state.button_count--; if (wlr_seat->pointer_state.button_count == 0) {
wlr_log(WLR_ERROR, "Corrupted seat button count");
} else {
wlr_seat->pointer_state.button_count--;
}
} }
struct wlr_seat_pointer_grab *grab = wlr_seat->pointer_state.grab; struct wlr_seat_pointer_grab *grab = wlr_seat->pointer_state.grab;