vlc | branch: master | Filip Roséen <[email protected]> | Thu Jan 12 13:31:08 2017 +0100| [948ceef01695e7cbf14b76111356126659df6561] | committer: Jean-Baptiste Kempf
demux/mkv: fix memory-leak on unknown elements If the read element is not a KaxSegment we do not store it anywhere, as such it will be leaked when we either read a new element, or assign NULL to p_l0 to signal that we should abort parsing. These additions make sure that we delete non-handled elements, effectively preventing leaks of such elements. Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=948ceef01695e7cbf14b76111356126659df6561 --- modules/demux/mkv/demux.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/demux/mkv/demux.cpp b/modules/demux/mkv/demux.cpp index 481aa0d..56248e8 100644 --- a/modules/demux/mkv/demux.cpp +++ b/modules/demux/mkv/demux.cpp @@ -502,6 +502,8 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS while (p_l0 != 0) { + bool b_l0_handled = false; + if ( MKV_IS_ID( p_l0, KaxSegment) ) { EbmlParser *ep; @@ -577,7 +579,12 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS p_segment1->segment = NULL; delete p_segment1; } + + b_l0_handled = true; } + + EbmlElement* p_l0_prev = p_l0; + if (p_l0->IsFiniteSize() ) { p_l0->SkipData(*p_estream, KaxMatroska_Context); @@ -587,6 +594,9 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS { p_l0 = NULL; } + + if( b_l0_handled == false ) + delete p_l0_prev; } if ( !b_keep_stream ) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
