Fixed crash if allocating memory for mouse clicks failed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index d54519c..f343c52 100644
--- a/src/events/SDL_mouse.c
+++ b/src/events/SDL_mouse.c
@@ -358,22 +358,26 @@ SDL_PrivateSendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state
if (clicks < 0) {
SDL_MouseClickState *clickstate = GetMouseClickState(mouse, button);
- if (state == SDL_PRESSED) {
- Uint32 now = SDL_GetTicks();
-
- if (SDL_TICKS_PASSED(now, clickstate->last_timestamp + SDL_double_click_time) ||
- SDL_abs(mouse->x - clickstate->last_x) > SDL_double_click_radius ||
- SDL_abs(mouse->y - clickstate->last_y) > SDL_double_click_radius) {
- clickstate->click_count = 0;
- }
- clickstate->last_timestamp = now;
- clickstate->last_x = mouse->x;
- clickstate->last_y = mouse->y;
- if (clickstate->click_count < 255) {
- ++clickstate->click_count;
+ if (clickstate) {
+ if (state == SDL_PRESSED) {
+ Uint32 now = SDL_GetTicks();
+
+ if (SDL_TICKS_PASSED(now, clickstate->last_timestamp + SDL_double_click_time) ||
+ SDL_abs(mouse->x - clickstate->last_x) > SDL_double_click_radius ||
+ SDL_abs(mouse->y - clickstate->last_y) > SDL_double_click_radius) {
+ clickstate->click_count = 0;
+ }
+ clickstate->last_timestamp = now;
+ clickstate->last_x = mouse->x;
+ clickstate->last_y = mouse->y;
+ if (clickstate->click_count < 255) {
+ ++clickstate->click_count;
+ }
}
+ clicks = clickstate->click_count;
+ } else {
+ clicks = 1;
}
- clicks = clickstate->click_count;
}
/* Post the event, if desired */