Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH 2/3] avcodec/cbs_h266_syntax_template: Check num_subpic_cols for 0
Date: Mon, 24 Jul 2023 22:54:20 -0300
Message-ID: <c68d1b56-74a1-28f9-3857-62b38a23cc95@gmail.com> (raw)
In-Reply-To: <20230725004609.17750-2-michael@niedermayer.cc>

On 7/24/2023 9:46 PM, Michael Niedermayer wrote:
> 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: Michael Niedermayer <michael@niedermayer.cc>
> ---
>   libavcodec/cbs_h266_syntax_template.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c
> index dce0216fbc..18ecf17e3b 100644
> --- a/libavcodec/cbs_h266_syntax_template.c
> +++ b/libavcodec/cbs_h266_syntax_template.c
> @@ -1187,6 +1187,8 @@ static int FUNC(sps)(CodedBitstreamContext *ctx, RWContext *rw,
>                   } else {
>                       int num_subpic_cols = tmp_width_val /
>                                        (current->sps_subpic_width_minus1[0] + 1);
> +                    if (!num_subpic_cols)
> +                        return AVERROR_INVALIDDATA;
>                       infer(sps_subpic_ctu_top_left_x[i],
>                             (i % num_subpic_cols) *
>                             (current->sps_subpic_width_minus1[0] + 1));

Does the following fix it too?

> diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c
> index dce0216fbc..98a8e033bf 100644
> --- a/libavcodec/cbs_h266_syntax_template.c
> +++ b/libavcodec/cbs_h266_syntax_template.c
> @@ -1140,6 +1140,8 @@ static int FUNC(sps)(CodedBitstreamContext *ctx, RWContext *rw,
>          if (current->sps_num_subpics_minus1 > 0) {
>              int wlen = av_ceil_log2(tmp_width_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)
>                  ubs(wlen, sps_subpic_width_minus1[0], 1, 0);
>              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)
>                  ubs(hlen, sps_subpic_height_minus1[0], 1, 0);
>              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) {
>                  flags(sps_subpic_treated_as_pic_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 {
>                      int num_subpic_cols = tmp_width_val /
>                                       (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],
>                            (i % num_subpic_cols) *
>                            (current->sps_subpic_width_minus1[0] + 1));

This checks the constrains defined in the spec.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2023-07-25  1:54 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-25  0:46 [FFmpeg-devel] [PATCH 1/3] avformat/imf_cpl: Replace NULL content_title_utf8 by "" Michael Niedermayer
2023-07-25  0:46 ` [FFmpeg-devel] [PATCH 2/3] avcodec/cbs_h266_syntax_template: Check num_subpic_cols for 0 Michael Niedermayer
2023-07-25  1:54   ` James Almer [this message]
2023-07-25 21:03     ` Michael Niedermayer
2023-07-25 21:08       ` James Almer
2023-07-25  0:46 ` [FFmpeg-devel] [PATCH 3/3] avcodec/cbs_h2645: Avoid an unchecked bytesteram read Michael Niedermayer
2023-07-25  2:28   ` James Almer
2023-07-25 20:41     ` Michael Niedermayer
2023-07-25  4:35 ` [FFmpeg-devel] [PATCH 1/3] avformat/imf_cpl: Replace NULL content_title_utf8 by "" Pierre-Anthony Lemieux
2023-07-25 20:37   ` Michael Niedermayer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c68d1b56-74a1-28f9-3857-62b38a23cc95@gmail.com \
    --to=jamrial@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git