Commit 96fadfb1 authored by Kostya Shishkov's avatar Kostya Shishkov

bmv: add stricter checks for invalid decoded length

This makes decoder handle random data passed as BMV frame data.
parent cf3a1948
...@@ -52,7 +52,7 @@ typedef struct BMVDecContext { ...@@ -52,7 +52,7 @@ typedef struct BMVDecContext {
static int decode_bmv_frame(const uint8_t *source, int src_len, uint8_t *frame, int frame_off) static int decode_bmv_frame(const uint8_t *source, int src_len, uint8_t *frame, int frame_off)
{ {
int val, saved_val = 0; unsigned val, saved_val = 0;
int tmplen = src_len; int tmplen = src_len;
const uint8_t *src, *source_end = source + src_len; const uint8_t *src, *source_end = source + src_len;
uint8_t *frame_end = frame + SCREEN_WIDE * SCREEN_HIGH; uint8_t *frame_end = frame + SCREEN_WIDE * SCREEN_HIGH;
...@@ -140,7 +140,9 @@ static int decode_bmv_frame(const uint8_t *source, int src_len, uint8_t *frame, ...@@ -140,7 +140,9 @@ static int decode_bmv_frame(const uint8_t *source, int src_len, uint8_t *frame,
case 1: case 1:
if (forward) { if (forward) {
if (dst - frame + SCREEN_WIDE < frame_off || if (dst - frame + SCREEN_WIDE < frame_off ||
frame_end - dst < frame_off + len) dst - frame + SCREEN_WIDE + frame_off < 0 ||
frame_end - dst < frame_off + len ||
frame_end - dst < len)
return -1; return -1;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
dst[i] = dst[frame_off + i]; dst[i] = dst[frame_off + i];
...@@ -148,7 +150,9 @@ static int decode_bmv_frame(const uint8_t *source, int src_len, uint8_t *frame, ...@@ -148,7 +150,9 @@ static int decode_bmv_frame(const uint8_t *source, int src_len, uint8_t *frame,
} else { } else {
dst -= len; dst -= len;
if (dst - frame + SCREEN_WIDE < frame_off || if (dst - frame + SCREEN_WIDE < frame_off ||
frame_end - dst < frame_off + len) dst - frame + SCREEN_WIDE + frame_off < 0 ||
frame_end - dst < frame_off + len ||
frame_end - dst < len)
return -1; return -1;
for (i = len - 1; i >= 0; i--) for (i = len - 1; i >= 0; i--)
dst[i] = dst[frame_off + i]; dst[i] = dst[frame_off + i];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment