diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-09-18 06:12:19 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-09-18 07:36:26 +0300 |
commit | b05d9ead6db10abdc299c6d1aa6bafb2c2790d7c (patch) | |
tree | fb41c4ac71e9e646da38a5b9e61d494d196f18b0 /libmpdemux/demux_mkv.c | |
parent | e1ecc4315265c465080616b8d8d9257b3aab6ee9 (diff) | |
download | mpv-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.c | 12 |
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); |