diff mbox series

[FFmpeg-devel,1/3] avformat/cafdec: sanity check channels and bps

Message ID 20240322230818.18997-1-michael@niedermayer.cc
State New
Headers show
Series [FFmpeg-devel,1/3] avformat/cafdec: sanity check channels and bps | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Michael Niedermayer March 22, 2024, 11:08 p.m. UTC
Fixes: Timeout
Fixes: 67044/clusterfuzz-testcase-minimized-ffmpeg_dem_CAF_fuzzer-5791144363491328

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavformat/cafdec.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Anton Khirnov March 27, 2024, 7:39 a.m. UTC | #1
Quoting Michael Niedermayer (2024-03-23 00:08:16)
> Fixes: Timeout
> Fixes: 67044/clusterfuzz-testcase-minimized-ffmpeg_dem_CAF_fuzzer-5791144363491328
> 
> Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavformat/cafdec.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c
> index 426c56b9bd..334077efb5 100644
> --- a/libavformat/cafdec.c
> +++ b/libavformat/cafdec.c
> @@ -33,6 +33,7 @@
>  #include "isom.h"
>  #include "mov_chan.h"
>  #include "libavcodec/flac.h"
> +#include "libavcodec/internal.h"
>  #include "libavutil/intreadwrite.h"
>  #include "libavutil/intfloat.h"
>  #include "libavutil/dict.h"
> @@ -87,6 +88,10 @@ static int read_desc_chunk(AVFormatContext *s)
>      st->codecpar->ch_layout.nb_channels = avio_rb32(pb);
>      st->codecpar->bits_per_coded_sample = avio_rb32(pb);
>  
> +    if (st->codecpar->ch_layout.nb_channels > FF_SANE_NB_CHANNELS ||

I dislike this.
Michael Niedermayer March 27, 2024, 11:27 p.m. UTC | #2
On Wed, Mar 27, 2024 at 08:39:17AM +0100, Anton Khirnov wrote:
> Quoting Michael Niedermayer (2024-03-23 00:08:16)
> > Fixes: Timeout
> > Fixes: 67044/clusterfuzz-testcase-minimized-ffmpeg_dem_CAF_fuzzer-5791144363491328
> > 
> > Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> > ---
> >  libavformat/cafdec.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c
> > index 426c56b9bd..334077efb5 100644
> > --- a/libavformat/cafdec.c
> > +++ b/libavformat/cafdec.c
> > @@ -33,6 +33,7 @@
> >  #include "isom.h"
> >  #include "mov_chan.h"
> >  #include "libavcodec/flac.h"
> > +#include "libavcodec/internal.h"
> >  #include "libavutil/intreadwrite.h"
> >  #include "libavutil/intfloat.h"
> >  #include "libavutil/dict.h"
> > @@ -87,6 +88,10 @@ static int read_desc_chunk(AVFormatContext *s)
> >      st->codecpar->ch_layout.nb_channels = avio_rb32(pb);
> >      st->codecpar->bits_per_coded_sample = avio_rb32(pb);
> >  
> > +    if (st->codecpar->ch_layout.nb_channels > FF_SANE_NB_CHANNELS ||
> 
> I dislike this.

I dislike it too

thx

[...]
diff mbox series

Patch

diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c
index 426c56b9bd..334077efb5 100644
--- a/libavformat/cafdec.c
+++ b/libavformat/cafdec.c
@@ -33,6 +33,7 @@ 
 #include "isom.h"
 #include "mov_chan.h"
 #include "libavcodec/flac.h"
+#include "libavcodec/internal.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/intfloat.h"
 #include "libavutil/dict.h"
@@ -87,6 +88,10 @@  static int read_desc_chunk(AVFormatContext *s)
     st->codecpar->ch_layout.nb_channels = avio_rb32(pb);
     st->codecpar->bits_per_coded_sample = avio_rb32(pb);
 
+    if (st->codecpar->ch_layout.nb_channels > FF_SANE_NB_CHANNELS ||
+        st->codecpar->bits_per_coded_sample > 64)
+        return AVERROR_INVALIDDATA;
+
     if (caf->bytes_per_packet < 0 || caf->frames_per_packet < 0 || st->codecpar->ch_layout.nb_channels < 0)
         return AVERROR_INVALIDDATA;