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

Attachment: signature.asc
Description: Digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to