diff --git a/src/logid/backend/hidpp/Report.cpp b/src/logid/backend/hidpp/Report.cpp index 8cc5c9b..c5683a7 100644 --- a/src/logid/backend/hidpp/Report.cpp +++ b/src/logid/backend/hidpp/Report.cpp @@ -161,9 +161,10 @@ Report::Report(Report::Type type, DeviceIndex device_index, (sw_id & 0x0f); } -Report::Report(const std::vector& data) +Report::Report(const std::vector& data) : + _data (data) { - _data = data; + _data.resize(HeaderLength + LongParamLength); // Truncating data is entirely valid here. switch(_data[Offset::Type]) { diff --git a/src/logid/backend/raw/RawDevice.cpp b/src/logid/backend/raw/RawDevice.cpp index f5a5ac2..e4f919a 100644 --- a/src/logid/backend/raw/RawDevice.cpp +++ b/src/logid/backend/raw/RawDevice.cpp @@ -262,6 +262,9 @@ std::vector RawDevice::_respondToReport throw TimeoutError(); _readReport(response, MAX_DATA_LENGTH, timeout); + if(!_continue_respond) + throw TimeoutError(); + // All reports have the device index at byte 2 if(response[1] != request[1]) { if(_continue_listen)