On Wed, Jun 29, 2011 at 3:44 PM, Ronald S. Bultje <[email protected]> wrote:
> From: Chris Evans <[email protected]>
>
> Specifically crafted samples can reinit ogg->streams[] while
> reading samples, and thus we should not cache old pointers since
> these may no longer be valid.
>
> Signed-off-by: Ronald S. Bultje <[email protected]>
> ---
> libavformat/oggdec.c | 5 +++--
> 1 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
> index 998a33b..931a826 100644
> --- a/libavformat/oggdec.c
> +++ b/libavformat/oggdec.c
> @@ -586,15 +586,15 @@ static int64_t ogg_read_timestamp(AVFormatContext *s,
> int stream_index,
> int64_t *pos_arg, int64_t pos_limit)
> {
> struct ogg *ogg = s->priv_data;
> - struct ogg_stream *os = ogg->streams + stream_index;
> AVIOContext *bc = s->pb;
> int64_t pts = AV_NOPTS_VALUE;
> - int i;
> + int i = -1;
Perhaps it would amek sense to have ogg_packets() always set str (i)?
> avio_seek(bc, *pos_arg, SEEK_SET);
> ogg_reset(ogg);
>
> while (avio_tell(bc) < pos_limit && !ogg_packet(s, &i, NULL, NULL,
> pos_arg)) {
> if (i == stream_index) {
> + struct ogg_stream *os = ogg->streams + stream_index;
> pts = ogg_calc_pts(s, i, NULL);
> if (os->keyframe_seek && !(os->pflags & AV_PKT_FLAG_KEY))
> pts = AV_NOPTS_VALUE;
> @@ -620,6 +620,7 @@ static int ogg_read_seek(AVFormatContext *s, int
> stream_index,
> os->keyframe_seek = 1;
>
> ret = av_seek_frame_binary(s, stream_index, timestamp, flags);
> + os = ogg->streams + stream_index;
> if (ret < 0)
> os->keyframe_seek = 0;
> return ret;
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel