[FFmpeg-cvslog] lavf/vobsub: free index pseudo-packet.
Nicolas George
git at videolan.org
Wed Mar 20 21:55:39 CET 2013
ffmpeg | branch: master | Nicolas George <nicolas.george at normalesup.org> | Wed Mar 20 11:12:59 2013 +0100| [cdd78a65f470aef5fd5d295bc0f7154d0cd442c1] | committer: Nicolas George
lavf/vobsub: free index pseudo-packet.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cdd78a65f470aef5fd5d295bc0f7154d0cd442c1
---
libavformat/mpeg.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c
index 5387b09..f36f0db 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,
More information about the ffmpeg-cvslog
mailing list