Skip to content

Commit 6735907

Browse files
authored
[rcore] Add gamepad >= 0 lower-bound guard to six sibling functions (#5938)
Commit 3edfe19 added a `gamepad >= 0` lower-bound check to GetGamepadAxisCount() and GetGamepadName(), but six sibling functions were left with only the upper-bound check (`gamepad < MAX_GAMEPADS`). A negative signed int passes that check and triggers out-of-bounds access on CORE.Input.Gamepad.ready[gamepad] and related arrays (UB in C). Apply the same `(gamepad >= 0) &&` guard added in 3edfe19 to: - IsGamepadAvailable - IsGamepadButtonPressed - IsGamepadButtonDown - IsGamepadButtonReleased - IsGamepadButtonUp - GetGamepadAxisMovement
1 parent 3edfe19 commit 6735907

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

src/rcore.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3926,7 +3926,7 @@ bool IsGamepadAvailable(int gamepad)
39263926
{
39273927
bool result = false;
39283928

3929-
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad]) result = true;
3929+
if ((gamepad >= 0) && (gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad]) result = true;
39303930

39313931
return result;
39323932
}
@@ -3946,7 +3946,7 @@ bool IsGamepadButtonPressed(int gamepad, int button)
39463946
{
39473947
bool pressed = false;
39483948

3949-
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
3949+
if ((gamepad >= 0) && (gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
39503950
{
39513951
if ((CORE.Input.Gamepad.previousButtonState[gamepad][button] == 0) && (CORE.Input.Gamepad.currentButtonState[gamepad][button] == 1)) pressed = true;
39523952
}
@@ -3959,7 +3959,7 @@ bool IsGamepadButtonDown(int gamepad, int button)
39593959
{
39603960
bool down = false;
39613961

3962-
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
3962+
if ((gamepad >= 0) && (gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
39633963
{
39643964
if (CORE.Input.Gamepad.currentButtonState[gamepad][button] == 1) down = true;
39653965
}
@@ -3972,7 +3972,7 @@ bool IsGamepadButtonReleased(int gamepad, int button)
39723972
{
39733973
bool released = false;
39743974

3975-
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
3975+
if ((gamepad >= 0) && (gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
39763976
{
39773977
if ((CORE.Input.Gamepad.previousButtonState[gamepad][button] == 1) && (CORE.Input.Gamepad.currentButtonState[gamepad][button] == 0)) released = true;
39783978
}
@@ -3985,7 +3985,7 @@ bool IsGamepadButtonUp(int gamepad, int button)
39853985
{
39863986
bool up = false;
39873987

3988-
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
3988+
if ((gamepad >= 0) && (gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (button < MAX_GAMEPAD_BUTTONS))
39893989
{
39903990
if (CORE.Input.Gamepad.currentButtonState[gamepad][button] == 0) up = true;
39913991
}
@@ -4015,7 +4015,7 @@ float GetGamepadAxisMovement(int gamepad, int axis)
40154015
{
40164016
float value = ((axis == GAMEPAD_AXIS_LEFT_TRIGGER) || (axis == GAMEPAD_AXIS_RIGHT_TRIGGER))? -1.0f : 0.0f;
40174017

4018-
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (axis < MAX_GAMEPAD_AXES))
4018+
if ((gamepad >= 0) && (gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (axis < MAX_GAMEPAD_AXES))
40194019
{
40204020
float movement = (value < 0.0f)? CORE.Input.Gamepad.axisState[gamepad][axis] : fabsf(CORE.Input.Gamepad.axisState[gamepad][axis]);
40214021

0 commit comments

Comments
 (0)