From 9fba8ebe0acdc28193d37b5e1f4c0d73c589ede2 Mon Sep 17 00:00:00 2001 From: Alex Converse Date: Fri, 23 Sep 2011 16:28:23 -0700 Subject: mpegps: Handle buffer exhaustion when reading packets. --- libavformat/mpeg.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'libavformat/mpeg.c') diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index bc450495ae..f797da7e27 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -418,7 +418,7 @@ static int mpegps_read_packet(AVFormatContext *s, { MpegDemuxContext *m = s->priv_data; AVStream *st; - int len, startcode, i, es_type; + int len, startcode, i, es_type, ret; enum CodecID codec_id = CODEC_ID_NONE; enum AVMediaType type; int64_t pts, dts, dummy_pos; //dummy_pos is needed for the index building to work @@ -562,7 +562,13 @@ static int mpegps_read_packet(AVFormatContext *s, return AVERROR(EINVAL); } av_new_packet(pkt, len); - avio_read(s->pb, pkt->data, pkt->size); + ret = avio_read(s->pb, pkt->data, pkt->size); + if (ret < 0) { + pkt->size = 0; + } else if (ret < pkt->size) { + pkt->size = ret; + memset(pkt->data + ret, 0, FF_INPUT_BUFFER_PADDING_SIZE); + } pkt->pts = pts; pkt->dts = dts; pkt->pos = dummy_pos; @@ -571,7 +577,7 @@ static int mpegps_read_packet(AVFormatContext *s, pkt->stream_index, pkt->pts / 90000.0, pkt->dts / 90000.0, pkt->size); - return 0; + return (ret < 0) ? ret : 0; } static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index, -- cgit v1.2.3