On Fri, Nov 04, 2016 at 10:28:20PM +0100, Andreas Cadhalpun wrote: > Otherwise the codec context and codecpar might disagree on the codec id, > triggering asserts in av_parser_parse2. > > Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com> > --- > libavformat/flvdec.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c > index e53c345..4ba7fc8 100644 > --- a/libavformat/flvdec.c > +++ b/libavformat/flvdec.c > @@ -289,7 +289,9 @@ static int flv_same_video_codec(AVCodecParameters *vpar, > int flags) > static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, > int flv_codecid, int read) > { > + int ret = 0; > AVCodecParameters *par = vstream->codecpar; > + enum AVCodecID old_codec_id = vstream->codecpar->codec_id; > switch (flv_codecid) { > case FLV_CODECID_H263: > par->codec_id = AV_CODEC_ID_FLV1; > @@ -317,20 +319,26 @@ static int flv_set_video_codec(AVFormatContext *s, > AVStream *vstream, > else > avio_skip(s->pb, 1); > } > - return 1; // 1 byte body size adjustment for flv_read_packet() > + ret = 1; // 1 byte body size adjustment for flv_read_packet() > + break; > case FLV_CODECID_H264: > par->codec_id = AV_CODEC_ID_H264; > vstream->need_parsing = AVSTREAM_PARSE_HEADERS; > - return 3; // not 4, reading packet type will consume one byte > + ret = 3; // not 4, reading packet type will consume one byte > + break; > case FLV_CODECID_MPEG4: > par->codec_id = AV_CODEC_ID_MPEG4; > - return 3; > + ret = 3; > + break; > default: > avpriv_request_sample(s, "Video codec (%x)", flv_codecid); > par->codec_tag = flv_codecid; > } > > - return 0; > + if (par->codec_id != old_codec_id) > + vstream->internal->need_context_update = 1;
If this occurs only for fuzzed samples then rejecting the change with a request for a sample seems better changing teh codec_id midstream like this could, seems problematic changing at at header time might be ok if that works better than not changing it for some real sample but maybe iam missing something [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I am the wisest man alive, for I know one thing, and that is that I know nothing. -- Socrates
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel