[Bug 51873] New: Joy.cpl crashes on the FFB tab when the FFB device is selected in the drop down list

WineHQ Bugzilla wine-bugs at winehq.org
Wed Oct 13 08:38:57 CDT 2021


https://bugs.winehq.org/show_bug.cgi?id=51873

            Bug ID: 51873
           Summary: Joy.cpl crashes on the FFB tab when the FFB device is
                    selected in the drop down list
           Product: Wine
           Version: 6.19
          Hardware: x86-64
                OS: Linux
            Status: UNCONFIRMED
          Severity: minor
          Priority: P2
         Component: joy.cpl
          Assignee: wine-bugs at winehq.org
          Reporter: logos128 at gmail.com
                CC: rbernon at codeweavers.com
      Distribution: ArchLinux

Created attachment 70792
  --> https://bugs.winehq.org/attachment.cgi?id=70792
joy_cpl_6.19_crash.log

This happens when the wineprefix is configured through registry to use bus_udev
/ hidraw ("Enable SDL" = 0 and "DisableInput" = 1).
After some debugging found out that the supported number of buttons in Joy.cpl
is 32, while the device is reporting 128. In result state.rgbButtons
(main.c/ff_input_thread()) is being evaluated outside of its bounds, which
eventually leads to going through the check where the real crash happens in
IDirectInputEffect_SetParameters():775.
After fixing the out of bounds issue (attached a patch for that), now joy.cpl
doesn't crash immediately, but after choosing the desired FFB effect and
pushing a button on the wheel to start the test.

After some more debugging found out that joy->effects[chosen_effect].effect
(the first operand) is NULL, leading to the segmentation fault. So probably the
lpVtbl is not initialized for some reason. Other parts of that structure looked
OK IMO.

Otherwise the tracking of the steering wheel on the first tab worked properly
through HIDRAW, as well as the available buttons. So this is already very
positive :)
Have tried it also through the SDL bus ("Enable SDL" = 1), and it worked as
expected. The FFB test also partially worked. The sine wave effect was
functional, while the constant and conditional effect didn't react.

Also while debugging the above issue saw that joy->num_buttons is incorrectly
set to 134 buttons, while the device (Simucube 2 Sport) has 128. Appeared that
the PID State input report which includes several usages with report count 1,
is being parsed as a normal input report in
dinput/joystick_hid.c/enum_objects(), and those parameters are counted as
buttons. So attached a patch for this too.

Do you have any hints how to debug dinput properly for the lpVtbl issue? The
gdb script helps a lot BTW :)

(The attached crash log is after the first patch applied, but it was similar
before that.)

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list