/*
LUFA Library
- Copyright (C) Dean Camera, 2017.
+ Copyright (C) Dean Camera, 2021.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
- Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2021 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceInfo,
void* Buffer,
+ const uint16_t BufferSize,
uint16_t* const PacketLength)
{
uint8_t ErrorCode;
return ErrorCode;
}
- *PacketLength = (uint16_t)le32_to_cpu(DeviceMessage.DataLength);
-
Pipe_Discard_Stream(le32_to_cpu(DeviceMessage.DataOffset) -
(sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)),
NULL);
+ const size_t ExpectedLength = (uint16_t)le32_to_cpu(DeviceMessage.DataLength);
+
+ if (ExpectedLength > BufferSize)
+ *PacketLength = BufferSize;
+ else
+ *PacketLength = ExpectedLength;
+
Pipe_Read_Stream_LE(Buffer, *PacketLength, NULL);
+ if (ExpectedLength > BufferSize)
+ Pipe_Discard_Stream(ExpectedLength - BufferSize, NULL);
if (!(Pipe_BytesInPipe()))
Pipe_ClearIN();