winebus.sys: Initialize last_report length and buffer.
Fixes a regression from e9c3c494fd
where
although we use the last report length, it was only initialized after
the first corresponding report was received. Calling HidD_GetInputReport
before that could cause a buffer overlow and report invalid data.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52068
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
598efc65c0
commit
6d3b3aab25
|
@ -444,8 +444,6 @@ static void process_hid_report(DEVICE_OBJECT *device, BYTE *report_buf, DWORD re
|
|||
|
||||
if (!ext->collection_desc.ReportIDs[0].ReportID) last_report = ext->last_reports[0];
|
||||
else last_report = ext->last_reports[report_buf[0]];
|
||||
|
||||
last_report->length = report_len;
|
||||
memcpy(last_report->buffer, report_buf, report_len);
|
||||
|
||||
if ((irp = pop_pending_read(ext)))
|
||||
|
@ -861,7 +859,13 @@ static NTSTATUS pdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
|||
{
|
||||
if (!(size = reports[i].InputLength)) continue;
|
||||
size = offsetof( struct hid_report, buffer[size] );
|
||||
if (!(ext->last_reports[reports[i].ReportID] = RtlAllocateHeap(GetProcessHeap(), 0, size))) status = STATUS_NO_MEMORY;
|
||||
if (!(report = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, size))) status = STATUS_NO_MEMORY;
|
||||
else
|
||||
{
|
||||
report->length = reports[i].InputLength;
|
||||
report->buffer[0] = reports[i].ReportID;
|
||||
ext->last_reports[reports[i].ReportID] = report;
|
||||
}
|
||||
}
|
||||
if (!status) ext->state = DEVICE_STATE_STARTED;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue