diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2019-02-22 15:09:28 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2019-02-22 15:09:28 +0100 | 
| commit | 388e9e57d8dcc1b5eda16670bae0e4518515504c (patch) | |
| tree | b98be48462fa392f4a4df4f1645007de54ad9494 /tracker-wii | |
| parent | 4f66eb2bc9038dbac490ac540cdfe0188c91f672 (diff) | |
tracker/wii: fix heap corruption
Diffstat (limited to 'tracker-wii')
| -rw-r--r-- | tracker-wii/wiiyourself/wiimote.cpp | 14 | 
1 files changed, 8 insertions, 6 deletions
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;  		}  | 
