Message ID | 20220320233056.18169-1-michael@niedermayer.cc |
---|---|
State | Accepted |
Commit | a8fd3f7fab83e1beea1c441e1a2e538e7aa431a5 |
Headers | show |
Series | [FFmpeg-devel,1/5] avformat/hls: Check target_duration | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
Michael Niedermayer <michael@niedermayer.cc> 于2022年3月21日周一 07:31写道: > > Fixes: signed integer overflow: 77777777777777 * 1000000 cannot be represented in type 'long long' > Fixes: 45545/clusterfuzz-testcase-minimized-ffmpeg_dem_HLS_fuzzer-6438101247983616 > > Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > --- > libavformat/hls.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/libavformat/hls.c b/libavformat/hls.c > index cf6ef9dfb6..a58c558ffe 100644 > --- a/libavformat/hls.c > +++ b/libavformat/hls.c > @@ -819,10 +819,16 @@ static int parse_playlist(HLSContext *c, const char *url, > &info); > new_rendition(c, &info, url); > } else if (av_strstart(line, "#EXT-X-TARGETDURATION:", &ptr)) { > + int64_t t; > ret = ensure_playlist(c, &pls, url); > if (ret < 0) > goto fail; > - pls->target_duration = strtoll(ptr, NULL, 10) * AV_TIME_BASE; > + t = strtoll(ptr, NULL, 10); > + if (t < 0 || t >= INT64_MAX / AV_TIME_BASE) { > + ret = AVERROR_INVALIDDATA; > + goto fail; > + } > + pls->target_duration = t * AV_TIME_BASE; > } else if (av_strstart(line, "#EXT-X-MEDIA-SEQUENCE:", &ptr)) { > uint64_t seq_no; > ret = ensure_playlist(c, &pls, url); > -- > 2.17.1 > > _______________________________________________ > 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". lgtm Thanks Steven
On Mon, Mar 21, 2022 at 09:40:46AM +0800, Steven Liu wrote: > Michael Niedermayer <michael@niedermayer.cc> 于2022年3月21日周一 07:31写道: > > > > Fixes: signed integer overflow: 77777777777777 * 1000000 cannot be represented in type 'long long' > > Fixes: 45545/clusterfuzz-testcase-minimized-ffmpeg_dem_HLS_fuzzer-6438101247983616 > > > > Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg > > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > > --- > > libavformat/hls.c | 8 +++++++- > > 1 file changed, 7 insertions(+), 1 deletion(-) > > > > diff --git a/libavformat/hls.c b/libavformat/hls.c > > index cf6ef9dfb6..a58c558ffe 100644 > > --- a/libavformat/hls.c > > +++ b/libavformat/hls.c > > @@ -819,10 +819,16 @@ static int parse_playlist(HLSContext *c, const char *url, > > &info); > > new_rendition(c, &info, url); > > } else if (av_strstart(line, "#EXT-X-TARGETDURATION:", &ptr)) { > > + int64_t t; > > ret = ensure_playlist(c, &pls, url); > > if (ret < 0) > > goto fail; > > - pls->target_duration = strtoll(ptr, NULL, 10) * AV_TIME_BASE; > > + t = strtoll(ptr, NULL, 10); > > + if (t < 0 || t >= INT64_MAX / AV_TIME_BASE) { > > + ret = AVERROR_INVALIDDATA; > > + goto fail; > > + } > > + pls->target_duration = t * AV_TIME_BASE; > > } else if (av_strstart(line, "#EXT-X-MEDIA-SEQUENCE:", &ptr)) { > > uint64_t seq_no; > > ret = ensure_playlist(c, &pls, url); > > -- > > 2.17.1 > > > > _______________________________________________ > > 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". > > > lgtm will apply thx [...]
diff --git a/libavformat/hls.c b/libavformat/hls.c index cf6ef9dfb6..a58c558ffe 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -819,10 +819,16 @@ static int parse_playlist(HLSContext *c, const char *url, &info); new_rendition(c, &info, url); } else if (av_strstart(line, "#EXT-X-TARGETDURATION:", &ptr)) { + int64_t t; ret = ensure_playlist(c, &pls, url); if (ret < 0) goto fail; - pls->target_duration = strtoll(ptr, NULL, 10) * AV_TIME_BASE; + t = strtoll(ptr, NULL, 10); + if (t < 0 || t >= INT64_MAX / AV_TIME_BASE) { + ret = AVERROR_INVALIDDATA; + goto fail; + } + pls->target_duration = t * AV_TIME_BASE; } else if (av_strstart(line, "#EXT-X-MEDIA-SEQUENCE:", &ptr)) { uint64_t seq_no; ret = ensure_playlist(c, &pls, url);
Fixes: signed integer overflow: 77777777777777 * 1000000 cannot be represented in type 'long long' Fixes: 45545/clusterfuzz-testcase-minimized-ffmpeg_dem_HLS_fuzzer-6438101247983616 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- libavformat/hls.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)