mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-05-29 04:21:03 +08:00
(emscripten) Add null checks for gamepad in vendor/product/xinput helpers (#15313)
navigator.getGamepads() can return null for a slot if the gamepad disconnects between the gamepadconnected event and the proxied MAIN_THREAD_EM_ASM_INT call. This causes a TypeError when accessing gamepad.id. Add null guards matching the pattern already used in EMSCRIPTEN_JoystickOpen and EMSCRIPTEN_JoystickRumble.
This commit is contained in:
@@ -37,9 +37,11 @@ static int numjoysticks = 0;
|
|||||||
|
|
||||||
static int SDL_GetEmscriptenJoystickVendor(int device_index)
|
static int SDL_GetEmscriptenJoystickVendor(int device_index)
|
||||||
{
|
{
|
||||||
// Let's assume that if we're calling these function then the gamepad object definitely exists
|
|
||||||
return MAIN_THREAD_EM_ASM_INT({
|
return MAIN_THREAD_EM_ASM_INT({
|
||||||
let gamepad = navigator['getGamepads']()[$0];
|
let gamepad = navigator['getGamepads']()[$0];
|
||||||
|
if (!gamepad) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Chrome, Edge, Opera: Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)
|
// Chrome, Edge, Opera: Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)
|
||||||
let vendor_str = 'Vendor: ';
|
let vendor_str = 'Vendor: ';
|
||||||
@@ -62,6 +64,9 @@ static int SDL_GetEmscriptenJoystickProduct(int device_index)
|
|||||||
{
|
{
|
||||||
return MAIN_THREAD_EM_ASM_INT({
|
return MAIN_THREAD_EM_ASM_INT({
|
||||||
let gamepad = navigator['getGamepads']()[$0];
|
let gamepad = navigator['getGamepads']()[$0];
|
||||||
|
if (!gamepad) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Chrome, Edge, Opera: Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)
|
// Chrome, Edge, Opera: Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)
|
||||||
let product_str = 'Product: ';
|
let product_str = 'Product: ';
|
||||||
@@ -84,6 +89,9 @@ static int SDL_IsEmscriptenJoystickXInput(int device_index)
|
|||||||
{
|
{
|
||||||
return MAIN_THREAD_EM_ASM_INT({
|
return MAIN_THREAD_EM_ASM_INT({
|
||||||
let gamepad = navigator['getGamepads']()[$0];
|
let gamepad = navigator['getGamepads']()[$0];
|
||||||
|
if (!gamepad) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Chrome, Edge, Opera: Xbox 360 Controller (XInput STANDARD GAMEPAD)
|
// Chrome, Edge, Opera: Xbox 360 Controller (XInput STANDARD GAMEPAD)
|
||||||
// Firefox: xinput
|
// Firefox: xinput
|
||||||
|
|||||||
Reference in New Issue
Block a user