From 15fd3fcdc214d06dd5c12daf4a29772e994c6b7a Mon Sep 17 00:00:00 2001
From: Cameron Gutman <[EMAIL REDACTED]>
Date: Tue, 29 Apr 2025 00:30:41 -0500
Subject: [PATCH] events: Fix undefined behavior when disabling some event
types
Shifting a signed int left by 31 is UB.
---
src/events/SDL_events.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c
index 1d4d785f5d71a..3dcd9a8f66f57 100644
--- a/src/events/SDL_events.c
+++ b/src/events/SDL_events.c
@@ -1318,7 +1318,7 @@ Uint8 SDL_EventState(Uint32 type, int state)
Uint8 lo = (type & 0xff);
if (SDL_disabled_events[hi] &&
- (SDL_disabled_events[hi]->bits[lo / 32] & (1 << (lo & 31)))) {
+ (SDL_disabled_events[hi]->bits[lo / 32] & (1U << (lo & 31)))) {
current_state = SDL_DISABLE;
} else {
current_state = SDL_ENABLE;
@@ -1332,11 +1332,11 @@ Uint8 SDL_EventState(Uint32 type, int state)
}
/* Out of memory, nothing we can do... */
if (SDL_disabled_events[hi]) {
- SDL_disabled_events[hi]->bits[lo / 32] |= (1 << (lo & 31));
+ SDL_disabled_events[hi]->bits[lo / 32] |= (1U << (lo & 31));
SDL_FlushEvent(type);
}
} else { // state == SDL_ENABLE
- SDL_disabled_events[hi]->bits[lo / 32] &= ~(1 << (lo & 31));
+ SDL_disabled_events[hi]->bits[lo / 32] &= ~(1U << (lo & 31));
}
#ifndef SDL_JOYSTICK_DISABLED