X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fbfi.c;h=2dab986f3af75ecf4bc0ca4aab6cb492e616723c;hb=520754476d9c2627b610fb9c508d0a85182d5a87;hp=6c98e33ab4a4812e4245dcef6ccd44bc6d3e27be;hpb=4069096dd535ee99175c2a29c1a1f59c3fc110c1;p=ffmpeg diff --git a/libavformat/bfi.c b/libavformat/bfi.c index 6c98e33ab4a..2dab986f3af 100644 --- a/libavformat/bfi.c +++ b/libavformat/bfi.c @@ -39,7 +39,7 @@ typedef struct BFIContext { int avflag; } BFIContext; -static int bfi_probe(AVProbeData * p) +static int bfi_probe(const AVProbeData * p) { /* Check file header */ if (AV_RL32(p->buf) == MKTAG('B', 'F', '&', 'I')) @@ -54,7 +54,7 @@ static int bfi_read_header(AVFormatContext * s) AVIOContext *pb = s->pb; AVStream *vstream; AVStream *astream; - int fps, chunk_header; + int ret, fps, chunk_header; /* Initialize the video codec... */ vstream = avformat_new_stream(s, NULL); @@ -69,6 +69,9 @@ static int bfi_read_header(AVFormatContext * s) /* Set the total number of frames. */ avio_skip(pb, 8); chunk_header = avio_rl32(pb); + if (chunk_header < 3) + return AVERROR_INVALIDDATA; + bfi->nframes = avio_rl32(pb); avio_rl32(pb); avio_rl32(pb); @@ -80,12 +83,9 @@ static int bfi_read_header(AVFormatContext * s) /*Load the palette to extradata */ avio_skip(pb, 8); - vstream->codecpar->extradata = av_malloc(768); - if (!vstream->codecpar->extradata) - return AVERROR(ENOMEM); - vstream->codecpar->extradata_size = 768; - avio_read(pb, vstream->codecpar->extradata, - vstream->codecpar->extradata_size); + ret = ff_get_extradata(s, vstream->codecpar, pb, 768); + if (ret < 0) + return ret; astream->codecpar->sample_rate = avio_rl32(pb); if (astream->codecpar->sample_rate <= 0) {