summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_ogg.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-02-06 10:30:10 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-02-06 10:30:10 +0000
commit02f5ebf1d5fc226f7fa2ee2ea1f29d42c44e21a6 (patch)
treee19095d7fa9bfdc4a8b824b189f11caea4126476 /libmpdemux/demux_ogg.c
parent7a9b1289a2438f21dc9c1a62abc149a1bb072e9b (diff)
downloadmpv-02f5ebf1d5fc226f7fa2ee2ea1f29d42c44e21a6.tar.bz2
mpv-02f5ebf1d5fc226f7fa2ee2ea1f29d42c44e21a6.tar.xz
Memleak fixes. Based on patch by Timothy Lee (timothy lee at siriushk com).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14667 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_ogg.c')
-rw-r--r--libmpdemux/demux_ogg.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index ddb4adb7b6..6d3142aa73 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -731,6 +731,8 @@ char *demux_ogg_sub_lang(demuxer_t *demuxer, int index) {
return (index < 0) ? NULL : (index >= ogg_d->n_text) ? NULL : ogg_d->text_langs[index];
}
+void demux_close_ogg(demuxer_t* demuxer);
+
/// Open an ogg physical stream
int demux_ogg_open(demuxer_t* demuxer) {
ogg_demuxer_t* ogg_d;
@@ -764,8 +766,7 @@ int demux_ogg_open(demuxer_t* demuxer) {
/// Error
if(np < 0) {
mp_msg(MSGT_DEMUX,MSGL_DBG2,"Ogg demuxer : Bad page sync\n");
- free(ogg_d);
- return 0;
+ goto err_out;
}
/// Need some more data
if(np == 0) {
@@ -773,8 +774,7 @@ int demux_ogg_open(demuxer_t* demuxer) {
buf = ogg_sync_buffer(sync,BLOCK_SIZE);
len = stream_read(s,buf,BLOCK_SIZE);
if(len == 0 && s->eof) {
- free(ogg_d);
- return 0;
+ goto err_out;
}
ogg_sync_wrote(sync,len);
continue;
@@ -1057,8 +1057,7 @@ int demux_ogg_open(demuxer_t* demuxer) {
}
if(!n_video && !n_audio) {
- free(ogg_d);
- return 0;
+ goto err_out;
}
/// Finish to setup the demuxer
@@ -1095,6 +1094,10 @@ int demux_ogg_open(demuxer_t* demuxer) {
mp_msg(MSGT_DEMUX,MSGL_V,"Ogg demuxer : found %d audio stream%s, %d video stream%s and %d text stream%s\n",n_audio,n_audio>1?"s":"",n_video,n_video>1?"s":"",ogg_d->n_text,ogg_d->n_text>1?"s":"");
return 1;
+
+err_out:
+ demux_close_ogg(demuxer);
+ return 0;
}