diff mbox series

[FFmpeg-devel,3/5] avformat/mvdec: Do not set invalid sample rate

Message ID 20210915200048.6691-3-michael@niedermayer.cc
State Accepted
Commit 737e6bf2162b89d396f4d477bfe8c99f1dd885de
Headers show
Series [FFmpeg-devel,1/5] avformat/sbgdec: Check for t0 overflow in expand_tseq() | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Michael Niedermayer Sept. 15, 2021, 8 p.m. UTC
Fixes: signed integer overflow: -682581959642593728 * 16 cannot be represented in type 'long'
Fixes: 37883/clusterfuzz-testcase-minimized-ffmpeg_dem_MV_fuzzer-5311691517198336

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

Comments

Peter Ross Sept. 16, 2021, 7:02 a.m. UTC | #1
On Wed, Sep 15, 2021 at 10:00:46PM +0200, Michael Niedermayer wrote:
> Fixes: signed integer overflow: -682581959642593728 * 16 cannot be represented in type 'long'
> Fixes: 37883/clusterfuzz-testcase-minimized-ffmpeg_dem_MV_fuzzer-5311691517198336
> 
> Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavformat/mvdec.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/mvdec.c b/libavformat/mvdec.c
> index b1450e08da9..7573087c7cc 100644
> --- a/libavformat/mvdec.c
> +++ b/libavformat/mvdec.c
> @@ -156,9 +156,10 @@ static int parse_audio_var(AVFormatContext *avctx, AVStream *st,
>      } else if (!strcmp(name, "NUM_CHANNELS")) {
>          return set_channels(avctx, st, var_read_int(pb, size));
>      } else if (!strcmp(name, "SAMPLE_RATE")) {
> -        st->codecpar->sample_rate = var_read_int(pb, size);
> -        if (st->codecpar->sample_rate <= 0)
> +        int sample_rate = var_read_int(pb, size);
> +        if (sample_rate <= 0)
>              return AVERROR_INVALIDDATA;
> +        st->codecpar->sample_rate = sample_rate;
>          avpriv_set_pts_info(st, 33, 1, st->codecpar->sample_rate);
>      } else if (!strcmp(name, "SAMPLE_WIDTH")) {
>          uint64_t bpc = var_read_int(pb, size) * (uint64_t)8;

please apply

-- Peter
(A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)
Michael Niedermayer Sept. 16, 2021, 4:11 p.m. UTC | #2
On Thu, Sep 16, 2021 at 05:02:53PM +1000, Peter Ross wrote:
> On Wed, Sep 15, 2021 at 10:00:46PM +0200, Michael Niedermayer wrote:
> > Fixes: signed integer overflow: -682581959642593728 * 16 cannot be represented in type 'long'
> > Fixes: 37883/clusterfuzz-testcase-minimized-ffmpeg_dem_MV_fuzzer-5311691517198336
> > 
> > Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> > ---
> >  libavformat/mvdec.c | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> > 
> > diff --git a/libavformat/mvdec.c b/libavformat/mvdec.c
> > index b1450e08da9..7573087c7cc 100644
> > --- a/libavformat/mvdec.c
> > +++ b/libavformat/mvdec.c
> > @@ -156,9 +156,10 @@ static int parse_audio_var(AVFormatContext *avctx, AVStream *st,
> >      } else if (!strcmp(name, "NUM_CHANNELS")) {
> >          return set_channels(avctx, st, var_read_int(pb, size));
> >      } else if (!strcmp(name, "SAMPLE_RATE")) {
> > -        st->codecpar->sample_rate = var_read_int(pb, size);
> > -        if (st->codecpar->sample_rate <= 0)
> > +        int sample_rate = var_read_int(pb, size);
> > +        if (sample_rate <= 0)
> >              return AVERROR_INVALIDDATA;
> > +        st->codecpar->sample_rate = sample_rate;
> >          avpriv_set_pts_info(st, 33, 1, st->codecpar->sample_rate);
> >      } else if (!strcmp(name, "SAMPLE_WIDTH")) {
> >          uint64_t bpc = var_read_int(pb, size) * (uint64_t)8;
> 
> please apply

will do

thx

[...]
diff mbox series

Patch

diff --git a/libavformat/mvdec.c b/libavformat/mvdec.c
index b1450e08da9..7573087c7cc 100644
--- a/libavformat/mvdec.c
+++ b/libavformat/mvdec.c
@@ -156,9 +156,10 @@  static int parse_audio_var(AVFormatContext *avctx, AVStream *st,
     } else if (!strcmp(name, "NUM_CHANNELS")) {
         return set_channels(avctx, st, var_read_int(pb, size));
     } else if (!strcmp(name, "SAMPLE_RATE")) {
-        st->codecpar->sample_rate = var_read_int(pb, size);
-        if (st->codecpar->sample_rate <= 0)
+        int sample_rate = var_read_int(pb, size);
+        if (sample_rate <= 0)
             return AVERROR_INVALIDDATA;
+        st->codecpar->sample_rate = sample_rate;
         avpriv_set_pts_info(st, 33, 1, st->codecpar->sample_rate);
     } else if (!strcmp(name, "SAMPLE_WIDTH")) {
         uint64_t bpc = var_read_int(pb, size) * (uint64_t)8;