summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2009-09-18 06:12:19 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2009-09-18 07:36:26 +0300
commitb05d9ead6db10abdc299c6d1aa6bafb2c2790d7c (patch)
treefb41c4ac71e9e646da38a5b9e61d494d196f18b0 /libmpdemux/demux_mkv.c
parente1ecc4315265c465080616b8d8d9257b3aab6ee9 (diff)
downloadmpv-b05d9ead6db10abdc299c6d1aa6bafb2c2790d7c.tar.bz2
mpv-b05d9ead6db10abdc299c6d1aa6bafb2c2790d7c.tar.xz
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.
Diffstat (limited to 'libmpdemux/demux_mkv.c')
-rw-r--r--libmpdemux/demux_mkv.c12
1 files changed, 10 insertions, 2 deletions
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);