[FFmpeg-devel] [PATCH 2/2] avformat/swfdec: Check outlen before allocation
Anton Khirnov
anton at khirnov.net
Sun Jan 24 15:05:17 EET 2021
Quoting Michael Niedermayer (2021-01-23 23:34:19)
> On Sat, Jan 23, 2021 at 03:29:38PM +0100, Anton Khirnov wrote:
> > Quoting Michael Niedermayer (2021-01-22 15:09:47)
> > > Fixes: Timeout (too long -> 241ms)
> > > Fixes: 29083/clusterfuzz-testcase-minimized-ffmpeg_dem_SWF_fuzzer-6273684478230528
> > >
> > > Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> > > Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> > > ---
> > > libavformat/swfdec.c | 3 +++
> > > 1 file changed, 3 insertions(+)
> > >
> > > diff --git a/libavformat/swfdec.c b/libavformat/swfdec.c
> > > index 1463f0ad4d..aa4be88f91 100644
> > > --- a/libavformat/swfdec.c
> > > +++ b/libavformat/swfdec.c
> > > @@ -367,6 +367,9 @@ static int swf_read_packet(AVFormatContext *s, AVPacket *pkt)
> > > ff_dlog(s, "bitmap: ch=%d fmt=%d %dx%d (linesize=%d) len=%d->%ld pal=%d\n",
> > > ch_id, bmp_fmt, width, height, linesize, len, out_len, colormapsize);
> > >
> > > + if (len * 17373LL < out_len)
> >
> > Where does the magic number come from?
>
> A very quick simulation of the best case compression for "compress"
> below is not nice written code as i did not expect I or anyone else
> would ever see it again
>
> I would have preferred some nicer expression or course, but thats
> what it seems to be asymptotically. For smaller amounts of data a
> tighter bound is possible but i saw no nice way to consider that
> and it seems also overkill to try to do it more fine grained for
> just this
>
> main(){
> int64_t bits = 0;
> int bank = 256;
> int bitbank = 8;
> for(unsigned i = 0; i<1024*1024*1024*4U-100000;) {
> int word_size = bank-255;
> i += word_size;
> bits += bitbank;
>
> if (!(bank & (bank-1)))
> bitbank ++;
> bank++;
> if (bitbank > 16) {
> printf("BEST %f \n", 8.0 * i / bits );
> bank = 256;
> bitbank = 8;
> }
> }
> }
>
> above assumes i remembered correctly how the algorithm works but the
> value was close to what actual compession of zeros gave
People who read this code in the future will be interested in all this.
So the content of your reply should be added to the commit message
and/or the code itself.
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list