Fixes: signed integer overflow: 32796 * 65536 cannot be represented in type
'int'
Fixes:
15430/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_VC1IMAGE_fuzzer-5735424087031808
Found-by: continuous fuzzing process
https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer
---
libavcodec/vc1_block.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c
index 86320db959..3078ce20cc 100644
--- a/libavcodec/vc1_block.c
+++ b/libavcodec/vc1_block.c
@@ -430,12 +430,12 @@ static inline int ff_vc1_pred_dc(MpegEncContext *s, int
overlap, int pq, int n,
if (c_avail && (n != 1 && n != 3)) {
q2 = FFABS(s->current_picture.qscale_table[mb_pos - 1]);
if (q2 && q2 != q1)
-c = (c * s->y_dc_scale_table[q2] * ff_vc1_dqscale[dqscale_index] +
0x2) >> 18;
+c = (int)((unsigned)c * s->y_dc_scale_table[q2] *
ff_vc1_dqscale[dqscale_index] + 0x2) >> 18;
}
if (a_avail && (n != 2 && n != 3)) {
q2 = FFABS(s->current_picture.qscale_table[mb_pos - s->mb_stride]);
if (q2 && q2 != q1)
-a = (a * s->y_dc_scale_table[q2] * ff_vc1_dqscale[dqscale_index] +
0x2) >> 18;
+a = (int)((unsigned)a * s->y_dc_scale_table[q2] *
ff_vc1_dqscale[dqscale_index] + 0x2) >> 18;
}
if (a_avail && c_avail && (n != 3)) {
int off = mb_pos;
@@ -445,7 +445,7 @@ static inline int ff_vc1_pred_dc(MpegEncContext *s, int
overlap, int pq, int n,
off -= s->mb_stride;
q2 = FFABS(s->current_picture.qscale_table[off]);
if (q2 && q2 != q1)
-b = (b * s->y_dc_scale_table[q2] * ff_vc1_dqscale[dqscale_index] +
0x2) >> 18;
+b = (int)((unsigned)b * s->y_dc_scale_table[q2] *
ff_vc1_dqscale[dqscale_index] + 0x2) >> 18;
}
if (c_avail && (!a_avail || abs(a - b) <= abs(b - c))) {
--
2.22.0
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".