upeksonly: Avoid reading beyond received packet boundary
The code would just read 4096 bytes from the packet, without checking the size and neither setting short_is_error. It is not clear whether packets from the device are always 4096 bytes or not. But the code assume we always get a full line, so enforce that and use the actual packet size otherwise.
This commit is contained in:
parent
7d9245505f
commit
b4dbbd667a
1 changed files with 9 additions and 1 deletions
|
@ -516,6 +516,14 @@ img_data_cb (FpiUsbTransfer *transfer, FpDevice *device,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* NOTE: The old code assume 4096 bytes are received each time
|
||||||
|
* but there is no reason we need to enforce that. However, we
|
||||||
|
* always need full lines. */
|
||||||
|
if (transfer->actual_length % 64 != 0)
|
||||||
|
error = fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
|
||||||
|
"Data packets need to be multiple of 64 bytes, got %zi bytes",
|
||||||
|
transfer->actual_length);
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
fp_warn ("bad status %s, terminating session", error->message);
|
fp_warn ("bad status %s, terminating session", error->message);
|
||||||
|
@ -536,7 +544,7 @@ img_data_cb (FpiUsbTransfer *transfer, FpDevice *device,
|
||||||
* the first 2 bytes are a sequence number
|
* the first 2 bytes are a sequence number
|
||||||
* then there are 62 bytes for image data
|
* then there are 62 bytes for image data
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < 4096; i += 64)
|
for (i = 0; i + 64 <= transfer->actual_length; i += 64)
|
||||||
{
|
{
|
||||||
if (!is_capturing (self))
|
if (!is_capturing (self))
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue