From b05d9ead6db10abdc299c6d1aa6bafb2c2790d7c Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Fri, 18 Sep 2009 06:12:19 +0300 Subject: demux_mkv: Fix memory leaks in attachment reading When the attachment-reading code was changed to use demuxer_add_attachment it should have been changed to free its internally-allocated objects too, since demuxer_add_attachment creates copies of everything and leaves ownership of original objects to caller. --- libmpdemux/demux_mkv.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'libmpdemux/demux_mkv.c') diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 27e564578e..118217e999 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -1319,17 +1319,19 @@ demux_mkv_read_attachments (demuxer_t *demuxer) switch (ebml_read_id (s, &il)) { case MATROSKA_ID_FILENAME: + free(name); name = ebml_read_utf8 (s, &l); if (name == NULL) - return 0; + goto error; mp_msg (MSGT_DEMUX, MSGL_V, "[mkv] | + FileName: %s\n", name); break; case MATROSKA_ID_FILEMIMETYPE: + free(mime); mime = ebml_read_ascii (s, &l); if (mime == NULL) - return 0; + goto error; mp_msg (MSGT_DEMUX, MSGL_V, "[mkv] | + FileMimeType: %s\n", mime); break; @@ -1343,7 +1345,10 @@ demux_mkv_read_attachments (demuxer_t *demuxer) data = malloc (num); if (stream_read(s, data, num) != (int) num) { + error: free(data); + free(mime); + free(name); return 0; } data_size = num; @@ -1360,6 +1365,9 @@ demux_mkv_read_attachments (demuxer_t *demuxer) } demuxer_add_attachment(demuxer, name, mime, data, data_size); + free(data); + free(mime); + free(name); mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] Attachment: %s, %s, %u bytes\n", name, mime, data_size); -- cgit v1.2.3