summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2022-09-24 17:26:17 +0800
committersakumisu <[email protected]>2022-09-24 18:35:21 +0800
commit9ddfd6017c0a328a8d18b048eb9048f92d0b0e14 (patch)
treeea3e006421e38c4bd9398cd8bbd202dde120a6fa
parentdc1c1da072d9b080bd5b035bdb131834c5a96cb0 (diff)
check if video frame header is illegal
-rw-r--r--class/video/usbh_video.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/class/video/usbh_video.c b/class/video/usbh_video.c
index 5c404a6d..7e00cbc2 100644
--- a/class/video/usbh_video.c
+++ b/class/video/usbh_video.c
@@ -444,16 +444,19 @@ void usbh_videostreaming_parse_mjpeg(struct usbh_urb *urb, struct usbh_videostre
uint8_t errorBit : 1U;
uint8_t endOfHeader : 1U;
*/
-
+ if (iso_packet[i].actual_length == 0) { /* skip */
+ stream->bufoffset = 0;
+ continue;
+ }
if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) {
- return;
+ stream->bufoffset = 0;
+ continue;
}
- if (iso_packet[i].transfer_buffer[1] & (1 << 6)) {
+ if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) {
stream->bufoffset = 0;
continue;
}
-
- if (iso_packet[i].actual_length == 0) { /* skip */
+ if (iso_packet[i].transfer_buffer[1] & (1 << 6)) {
stream->bufoffset = 0;
continue;
}
@@ -510,15 +513,19 @@ void usbh_videostreaming_parse_yuyv2rgb565(struct usbh_urb *urb, struct usbh_vid
uint8_t endOfHeader : 1U;
*/
+ if (iso_packet[i].actual_length == 0) { /* skip */
+ stream->bufoffset = 0;
+ continue;
+ }
if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) {
- return;
+ stream->bufoffset = 0;
+ continue;
}
- if (iso_packet[i].transfer_buffer[1] & (1 << 6)) {
+ if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) {
stream->bufoffset = 0;
continue;
}
-
- if (iso_packet[i].actual_length == 0) { /* skip */
+ if (iso_packet[i].transfer_buffer[1] & (1 << 6)) {
stream->bufoffset = 0;
continue;
}