Message ID | 20230530212136.1368389-1-paul.arzelier@free.fr |
---|---|
State | Accepted |
Commit | a9042db1d30483639b3ca610b74a7d43f29ea1a9 |
Headers | show |
Series | [FFmpeg-devel] avformat/oggparseflac: check init_get_bits' result | expand |
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 |
On 5/30/2023 6:21 PM, Paul Arzelier wrote: > From: Polochon-street <polochonstreet@gmx.fr> > > Check init_get_bits' result for NULL, to avoid dereferencing a NULL > pointer later (CWE-476). > Without this, a segfault happens when trying to decode a handcrafted > ogg-flac file with an absurdly long (e.g. 268435455 bytes) ogg header. > > Thanks to jamrial for basically writing this patch after I reported the bug! > > Signed-off-by: Paul Arzelier <paul.arzelier@free.fr> Applied.
diff --git a/libavformat/oggparseflac.c b/libavformat/oggparseflac.c index eef6e09927..557440d94b 100644 --- a/libavformat/oggparseflac.c +++ b/libavformat/oggparseflac.c @@ -40,7 +40,10 @@ flac_header (AVFormatContext * s, int idx) if (os->buf[os->pstart] == 0xff) return 0; - init_get_bits(&gb, os->buf + os->pstart, os->psize*8); + ret = init_get_bits8(&gb, os->buf + os->pstart, os->psize); + if (ret < 0) + return ret; + skip_bits1(&gb); /* metadata_last */ mdt = get_bits(&gb, 7);