From 68e970b9cd9dab812715642e5359e930959f339d Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 11 Jun 2023 22:58:16 +0200 Subject: [PATCH] Joystick Raw Input: Do not add the axis if the center is 0 - prevents malformed vJoy 2.0.5 axes from causing 86Box to crash with a division by zero. --- src/qt/win_joystick_rawinput.c | 7 ++++++- src/win/win_joystick_rawinput.c | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/qt/win_joystick_rawinput.c b/src/qt/win_joystick_rawinput.c index c4424e484..e5d477296 100644 --- a/src/qt/win_joystick_rawinput.c +++ b/src/qt/win_joystick_rawinput.c @@ -98,6 +98,8 @@ joystick_add_button(raw_joystick_t *rawjoy, plat_joystick_t *joy, USAGE usage) void joystick_add_axis(raw_joystick_t *rawjoy, plat_joystick_t *joy, PHIDP_VALUE_CAPS prop) { + LONG center; + if (joy->nr_axes >= 8) return; @@ -141,7 +143,10 @@ joystick_add_axis(raw_joystick_t *rawjoy, plat_joystick_t *joy, PHIDP_VALUE_CAPS } rawjoy->axis[joy->nr_axes].min = prop->LogicalMin; - joy->nr_axes++; + center = (rawjoy->axis[joy->nr_axes].max - rawjoy->axis[joy->nr_axes].min + 1) / 2; + + if (center != 0x00) + joy->nr_axes++; } void diff --git a/src/win/win_joystick_rawinput.c b/src/win/win_joystick_rawinput.c index 0bdb99a7a..6f2a1e4c0 100644 --- a/src/win/win_joystick_rawinput.c +++ b/src/win/win_joystick_rawinput.c @@ -99,6 +99,8 @@ joystick_add_button(raw_joystick_t *rawjoy, plat_joystick_t *joy, USAGE usage) void joystick_add_axis(raw_joystick_t *rawjoy, plat_joystick_t *joy, PHIDP_VALUE_CAPS prop) { + LONG center; + if (joy->nr_axes >= 8) return; @@ -142,7 +144,10 @@ joystick_add_axis(raw_joystick_t *rawjoy, plat_joystick_t *joy, PHIDP_VALUE_CAPS } rawjoy->axis[joy->nr_axes].min = prop->LogicalMin; - joy->nr_axes++; + center = (rawjoy->axis[joy->nr_axes].max - rawjoy->axis[joy->nr_axes].min + 1) / 2; + + if (center != 0x00) + joy->nr_axes++; } void