diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2013-03-20 11:12:59 +0100 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2013-03-20 21:13:55 +0100 |
commit | cdd78a65f470aef5fd5d295bc0f7154d0cd442c1 (patch) | |
tree | 88b17b8330ef167882323f2cd5ae58d83969a286 /libavformat/mpeg.c | |
parent | 6a90f6d7891b0c062da223b9c135304c5fd8dd95 (diff) | |
download | ffmpeg-cdd78a65f470aef5fd5d295bc0f7154d0cd442c1.tar.gz |
lavf/vobsub: free index pseudo-packet.
Diffstat (limited to 'libavformat/mpeg.c')
-rw-r--r-- | libavformat/mpeg.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index 5387b092e4..f36f0db727 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -805,6 +805,8 @@ end: return ret; } +#define FAIL(r) do { ret = r; goto fail; } while (0) + static int vobsub_read_packet(AVFormatContext *s, AVPacket *pkt) { MpegDemuxContext *vobsub = s->priv_data; @@ -838,7 +840,7 @@ static int vobsub_read_packet(AVFormatContext *s, AVPacket *pkt) ret = mpegps_read_pes_header(vobsub->sub_ctx, NULL, &startcode, &pts, &dts); if (ret < 0) - return ret; + FAIL(ret); to_read = ret & 0xffff; /* this prevents reads above the current packet */ @@ -855,7 +857,7 @@ static int vobsub_read_packet(AVFormatContext *s, AVPacket *pkt) ret = av_grow_packet(pkt, to_read); if (ret < 0) - return ret; + FAIL(ret); n = avio_read(pb, pkt->data + (pkt->size - to_read), to_read); if (n < to_read) @@ -870,7 +872,12 @@ static int vobsub_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->pos = idx_pkt.pos; pkt->stream_index = idx_pkt.stream_index; + av_free_packet(&idx_pkt); return 0; + +fail: + av_free_packet(&idx_pkt); + return ret; } static int vobsub_read_seek(AVFormatContext *s, int stream_index, |