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

Reply via email to