vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Wed Feb  7 
17:46:23 2018 +0100| [44745880de8554e29fac06592e1ca85642789840] | committer: 
Francois Cartegnie

demux: ts: fix potential leaks with desc/langs

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=44745880de8554e29fac06592e1ca85642789840
---

 modules/demux/mpeg/ts_psi.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/modules/demux/mpeg/ts_psi.c b/modules/demux/mpeg/ts_psi.c
index 9100f829b4..fec7120175 100644
--- a/modules/demux/mpeg/ts_psi.c
+++ b/modules/demux/mpeg/ts_psi.c
@@ -481,19 +481,26 @@ static void SetupISO639Descriptor( demux_t *p_demux, 
ts_es_t *p_es,
         return;
     }
 
-    p_es->fmt.psz_language = malloc( 4 );
-    if( p_es->fmt.psz_language )
+    if( !p_es->fmt.psz_language )
     {
-        memcpy( p_es->fmt.psz_language, p_decoded->code[0].iso_639_code, 3 );
-        p_es->fmt.psz_language[3] = 0;
-        msg_Dbg( p_demux, "      found language: %s", p_es->fmt.psz_language);
+        p_es->fmt.psz_language = malloc( 4 );
+        if( p_es->fmt.psz_language )
+        {
+            memcpy( p_es->fmt.psz_language, p_decoded->code[0].iso_639_code, 3 
);
+            p_es->fmt.psz_language[3] = 0;
+            msg_Dbg( p_demux, "      found language: %s", 
p_es->fmt.psz_language);
+        }
     }
 
     uint8_t type = p_decoded->code[0].i_audio_type;
-    p_es->fmt.psz_description = GetIso639AudioTypeDesc( type );
+    if( !p_es->fmt.psz_description )
+        p_es->fmt.psz_description = GetIso639AudioTypeDesc( type );
     if (type == 0x00) /* Undefined */
         p_es->fmt.i_priority = ES_PRIORITY_SELECTABLE_MIN + 1; // prioritize 
normal audio tracks
 
+    if( p_es->fmt.p_extra_languages )
+        return;
+
     p_es->fmt.i_extra_languages = p_decoded->i_code_count-1;
     if( p_es->fmt.i_extra_languages > 0 )
         p_es->fmt.p_extra_languages =
@@ -1817,7 +1824,8 @@ static void PMTCallBack( void *data, dvbpsi_pmt_t 
*p_dvbpsipmt )
         {
             msg_Dbg( p_demux, "   => pid %d content is *unknown*",
                      p_dvbpsies->i_pid );
-            p_pes->p_es->fmt.psz_description = strdup( psz_typedesc );
+            if( !p_pes->p_es->fmt.psz_description )
+                p_pes->p_es->fmt.psz_description = strdup( psz_typedesc );
         }
         else
         {

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to