From 388e9e57d8dcc1b5eda16670bae0e4518515504c Mon Sep 17 00:00:00 2001 From: Stanislaw Halik <sthalik@misaki.pl> Date: Fri, 22 Feb 2019 15:09:28 +0100 Subject: tracker/wii: fix heap corruption --- tracker-wii/wiiyourself/wiimote.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'tracker-wii') diff --git a/tracker-wii/wiiyourself/wiimote.cpp b/tracker-wii/wiiyourself/wiimote.cpp index 7a5ee833..f154a198 100644 --- a/tracker-wii/wiiyourself/wiimote.cpp +++ b/tracker-wii/wiiyourself/wiimote.cpp @@ -242,20 +242,22 @@ bool wiimote::Connect(unsigned wiimote_index, bool force_hidwrites) { // get the buffer size for this device detail instance DWORD req_size = 0; - SetupDiGetDeviceInterfaceDetail(dev_info, &didata, NULL, 0, &req_size, NULL); + if (!SetupDiGetDeviceInterfaceDetail(dev_info, &didata, NULL, 0, &req_size, NULL)) + { + WARN(_T("couldn't get devinterface info for %u"), index); + break; + } // (bizarre way of doing it) create a buffer large enough to hold the // fixed-size detail struct components, and the variable string size - using spdidd = SP_DEVICE_INTERFACE_DETAIL_DATA; - constexpr std::align_val_t align { alignof(spdidd) }; - spdidd *didetail = (spdidd*)operator new(req_size, align); - _ASSERT(didetail); + using spdidd = SP_DEVICE_INTERFACE_DETAIL_DATA; + spdidd *didetail = (spdidd*)operator new(req_size, (std::align_val_t)alignof(spdidd)); didetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); // now actually get the detail struct if (!SetupDiGetDeviceInterfaceDetail(dev_info, &didata, didetail, req_size, &req_size, NULL)) { - WARN(_T("couldn't get devinterface info for %u"), index); + WARN(_T("couldn't get devinterface info for %u #2"), index); break; } -- cgit v1.2.3