On 2/6/2019 10:13 PM, chcunningham wrote:
> Codec information may change while reading ogg packets. Update the
> stream's internal avctx to match.
> ---
>  libavformat/oggparseogm.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/libavformat/oggparseogm.c b/libavformat/oggparseogm.c
> index a07453760b..b07a5d55ba 100644
> --- a/libavformat/oggparseogm.c
> +++ b/libavformat/oggparseogm.c
> @@ -114,6 +114,9 @@ ogm_header(AVFormatContext *s, int idx)
>                  bytestream2_get_buffer(&p, st->codecpar->extradata, 
> st->codecpar->extradata_size);
>              }
>          }
> +
> +        // Update internal avctx with changes to codecpar above.
> +        st->internal->need_context_update = 1;
>      } else if (bytestream2_peek_byte(&p) == 3) {
>          bytestream2_skip(&p, 7);
>          if (bytestream2_get_bytes_left(&p) > 1)

Can a valid ogm stream contain more than one header packet? Because the
issue here as far as i can see is that ogm_header() is not validating
the output of ff_codec_get_id() and is happily accepting and propagating
AV_CODEC_ID_NONE as derived from it in a late packet, long after the
parser and everything else was already initialized.

No other ogg module sets st->internal->need_context_update and all of
them may also end up calling the respective header reading function more
than once on invalid files, but unlike the ogm one, all of them hardcode
the codec_id instead of blindly accepting a potentially bogus value
derived from the bitstream.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to