device: fix stack corruption crashes on 32-bit Windows

This commit is contained in:
rdb 2019-01-31 18:23:29 +01:00
parent 3a6f7fcde1
commit 22cac1cdf9
4 changed files with 14 additions and 14 deletions

View File

@ -289,8 +289,8 @@ on_input_device_arrival(HANDLE handle) {
// Some devices insert quite some trailing space here. // Some devices insert quite some trailing space here.
wchar_t *wbuffer = (wchar_t *)buffer; wchar_t *wbuffer = (wchar_t *)buffer;
size_t wlen = wcslen(wbuffer); size_t wlen = wcsnlen_s(wbuffer, sizeof(buffer) / sizeof(wchar_t));
while (iswspace(wbuffer[wlen - 1])) { while (wlen > 0 && iswspace(wbuffer[wlen - 1])) {
wbuffer[--wlen] = 0; wbuffer[--wlen] = 0;
} }
TextEncoder encoder; TextEncoder encoder;

View File

@ -54,7 +54,7 @@ private:
static LRESULT WINAPI window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); static LRESULT WINAPI window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
typedef CONFIGRET (*pCM_Get_DevNode_Property)(DEVINST, const DEVPROPKEY *, DEVPROPTYPE *, PBYTE, PULONG, ULONG); typedef CONFIGRET (WINAPI *pCM_Get_DevNode_Property)(DEVINST, const DEVPROPKEY *, DEVPROPTYPE *, PBYTE, PULONG, ULONG);
pCM_Get_DevNode_Property _CM_Get_DevNode_PropertyW; pCM_Get_DevNode_Property _CM_Get_DevNode_PropertyW;
friend class InputDeviceManager; friend class InputDeviceManager;

View File

@ -159,11 +159,11 @@ typedef struct _HIDP_DATA {
} HIDP_DATA, *PHIDP_DATA; } HIDP_DATA, *PHIDP_DATA;
typedef LONG NTSTATUS; typedef LONG NTSTATUS;
typedef NTSTATUS (*pHidP_GetCaps)(PHIDP_PREPARSED_DATA, PHIDP_CAPS); typedef NTSTATUS (__stdcall *pHidP_GetCaps)(PHIDP_PREPARSED_DATA, PHIDP_CAPS);
typedef NTSTATUS (*pHidP_GetButtonCaps)(HIDP_REPORT_TYPE, PHIDP_BUTTON_CAPS, PUSHORT, PHIDP_PREPARSED_DATA); typedef NTSTATUS (__stdcall *pHidP_GetButtonCaps)(HIDP_REPORT_TYPE, PHIDP_BUTTON_CAPS, PUSHORT, PHIDP_PREPARSED_DATA);
typedef NTSTATUS (*pHidP_GetValueCaps)(HIDP_REPORT_TYPE, PHIDP_VALUE_CAPS, PUSHORT, PHIDP_PREPARSED_DATA); typedef NTSTATUS (__stdcall *pHidP_GetValueCaps)(HIDP_REPORT_TYPE, PHIDP_VALUE_CAPS, PUSHORT, PHIDP_PREPARSED_DATA);
typedef NTSTATUS (*pHidP_GetData)(HIDP_REPORT_TYPE, PHIDP_DATA, PULONG, PHIDP_PREPARSED_DATA, PCHAR, ULONG); typedef NTSTATUS (__stdcall *pHidP_GetData)(HIDP_REPORT_TYPE, PHIDP_DATA, PULONG, PHIDP_PREPARSED_DATA, PCHAR, ULONG);
typedef ULONG (*pHidP_MaxDataListLength)(HIDP_REPORT_TYPE, PHIDP_PREPARSED_DATA); typedef ULONG (__stdcall *pHidP_MaxDataListLength)(HIDP_REPORT_TYPE, PHIDP_PREPARSED_DATA);
static pHidP_GetCaps _HidP_GetCaps = nullptr; static pHidP_GetCaps _HidP_GetCaps = nullptr;
static pHidP_GetButtonCaps _HidP_GetButtonCaps = nullptr; static pHidP_GetButtonCaps _HidP_GetButtonCaps = nullptr;

View File

@ -99,12 +99,12 @@ typedef struct _XINPUT_CAPABILITIES_EX {
WORD Unknown2; WORD Unknown2;
} XINPUT_CAPABILITIES_EX; } XINPUT_CAPABILITIES_EX;
typedef DWORD (*pXInputGetState)(DWORD, XINPUT_STATE *); typedef DWORD (WINAPI *pXInputGetState)(DWORD, XINPUT_STATE *);
typedef DWORD (*pXInputSetState)(DWORD, XINPUT_VIBRATION *); typedef DWORD (WINAPI *pXInputSetState)(DWORD, XINPUT_VIBRATION *);
typedef DWORD (*pXInputGetCapabilities)(DWORD, DWORD, XINPUT_CAPABILITIES *); typedef DWORD (WINAPI *pXInputGetCapabilities)(DWORD, DWORD, XINPUT_CAPABILITIES *);
typedef DWORD (*pXInputGetCapabilitiesEx)(DWORD, DWORD, DWORD, XINPUT_CAPABILITIES_EX *); typedef DWORD (WINAPI *pXInputGetCapabilitiesEx)(DWORD, DWORD, DWORD, XINPUT_CAPABILITIES_EX *);
typedef DWORD (*pXInputGetBatteryInformation)(DWORD, BYTE, XINPUT_BATTERY_INFORMATION *); typedef DWORD (WINAPI *pXInputGetBatteryInformation)(DWORD, BYTE, XINPUT_BATTERY_INFORMATION *);
typedef DWORD (*pXInputGetBaseBusInformation)(DWORD, XINPUT_BUSINFO *); typedef DWORD (WINAPI *pXInputGetBaseBusInformation)(DWORD, XINPUT_BUSINFO *);
static pXInputGetState get_state = nullptr; static pXInputGetState get_state = nullptr;
static pXInputSetState set_state = nullptr; static pXInputSetState set_state = nullptr;