You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
avcodec/cbs_h266_syntax_template: add missing checks to subpic dimension values
Fixes: division by zero Fixes: 60306/clusterfuzz-testcase-minimized-ffmpeg_BSF_TRACE_HEADERS_fuzzer-5538913553612800 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@@ -1140,6 +1140,8 @@ static int FUNC(sps)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||||||
if (current->sps_num_subpics_minus1 > 0) {
|
if (current->sps_num_subpics_minus1 > 0) {
|
||||||
int wlen = av_ceil_log2(tmp_width_val);
|
int wlen = av_ceil_log2(tmp_width_val);
|
||||||
int hlen = av_ceil_log2(tmp_height_val);
|
int hlen = av_ceil_log2(tmp_height_val);
|
||||||
|
infer(sps_subpic_ctu_top_left_x[0], 0);
|
||||||
|
infer(sps_subpic_ctu_top_left_y[0], 0);
|
||||||
if (current->sps_pic_width_max_in_luma_samples > ctb_size_y)
|
if (current->sps_pic_width_max_in_luma_samples > ctb_size_y)
|
||||||
ubs(wlen, sps_subpic_width_minus1[0], 1, 0);
|
ubs(wlen, sps_subpic_width_minus1[0], 1, 0);
|
||||||
else
|
else
|
||||||
@@ -1147,7 +1149,7 @@ static int FUNC(sps)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||||||
if (current->sps_pic_height_max_in_luma_samples > ctb_size_y)
|
if (current->sps_pic_height_max_in_luma_samples > ctb_size_y)
|
||||||
ubs(hlen, sps_subpic_height_minus1[0], 1, 0);
|
ubs(hlen, sps_subpic_height_minus1[0], 1, 0);
|
||||||
else
|
else
|
||||||
infer(sps_subpic_height_minus1[0], tmp_height_val);
|
infer(sps_subpic_height_minus1[0], tmp_height_val - 1);
|
||||||
if (!current->sps_independent_subpics_flag) {
|
if (!current->sps_independent_subpics_flag) {
|
||||||
flags(sps_subpic_treated_as_pic_flag[0], 1, 0);
|
flags(sps_subpic_treated_as_pic_flag[0], 1, 0);
|
||||||
flags(sps_loop_filter_across_subpic_enabled_flag[0], 1, 0);
|
flags(sps_loop_filter_across_subpic_enabled_flag[0], 1, 0);
|
||||||
@@ -1187,6 +1189,12 @@ static int FUNC(sps)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||||||
} else {
|
} else {
|
||||||
int num_subpic_cols = tmp_width_val /
|
int num_subpic_cols = tmp_width_val /
|
||||||
(current->sps_subpic_width_minus1[0] + 1);
|
(current->sps_subpic_width_minus1[0] + 1);
|
||||||
|
if (tmp_width_val % (current->sps_subpic_width_minus1[0] + 1) ||
|
||||||
|
tmp_height_val % (current->sps_subpic_width_minus1[0] + 1) ||
|
||||||
|
current->sps_num_subpics_minus1 !=
|
||||||
|
(num_subpic_cols * tmp_height_val /
|
||||||
|
(current->sps_subpic_height_minus1[0] + 1) - 1))
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
infer(sps_subpic_ctu_top_left_x[i],
|
infer(sps_subpic_ctu_top_left_x[i],
|
||||||
(i % num_subpic_cols) *
|
(i % num_subpic_cols) *
|
||||||
(current->sps_subpic_width_minus1[0] + 1));
|
(current->sps_subpic_width_minus1[0] + 1));
|
||||||
|
Reference in New Issue
Block a user