[FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h2645: Avoid more cases of 0 size slices

Michael Niedermayer michaelni at gmx.at
Mon Mar 9 23:52:37 EET 2020


On Mon, Mar 09, 2020 at 05:57:50AM +0100, Andreas Rheinhardt wrote:
> Michael Niedermayer:
> > Fixes: Assertion failure
> > Fixes: 19629/clusterfuzz-testcase-minimized-ffmpeg_BSF_H264_METADATA_fuzzer-5676822528524288
> > 
> > Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> > Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> > ---
> >  libavcodec/cbs_h2645.c | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> > 
> > diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
> > index c8347ba5fa..7427eefa30 100644
> > --- a/libavcodec/cbs_h2645.c
> > +++ b/libavcodec/cbs_h2645.c
> > @@ -870,7 +870,8 @@ static int cbs_h264_read_nal_unit(CodedBitstreamContext *ctx,
> >                         "from slice data.\n", z);
> >                  len -= z;
> >              }
> > -
> > +            if (len <= pos / 8)
> > +                return AVERROR_INVALIDDATA;
> >              slice->data_size = len - pos / 8;
> >              slice->data_ref  = av_buffer_ref(unit->data_ref);
> >              if (!slice->data_ref)
> > @@ -1052,7 +1053,8 @@ static int cbs_h265_read_nal_unit(CodedBitstreamContext *ctx,
> >                         "from slice data.\n", z);
> >                  len -= z;
> >              }
> > -
> > +            if (len <= pos / 8)
> > +                return AVERROR_INVALIDDATA;
> >              slice->data_size = len - pos / 8;
> >              slice->data_ref  = av_buffer_ref(unit->data_ref);
> >              if (!slice->data_ref)
> > 
> 
> Imagine you have CAVLC encoded H.264 where there is nothing after the
> header except zero bits and where the slice header is not
> byte-aligned. Then av_assert0(temp) in cbs_h2645_write_slice_data()
> will be triggered both now as well as with your patch, because your
> check is too crude.
> 
> I have already sent a patch [2] for this. It presupposes [1].

the assert you speak about wasnt the one failing for this.
but your patches are a nicer solution so ill apply them

Thanks


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Awnsering whenever a program halts or runs forever is
On a turing machine, in general impossible (turings halting problem).
On any real computer, always possible as a real computer has a finite number
of states N, and will either halt in less than N cycles or never halt.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200309/c77e3c00/attachment.sig>


More information about the ffmpeg-devel mailing list