]> git.sesse.net Git - vlc/commitdiff
livehttp: fix many memory leaks
authorRémi Duraffort <ivoire@videolan.org>
Sat, 14 Dec 2013 09:47:01 +0000 (10:47 +0100)
committerRémi Duraffort <ivoire@videolan.org>
Sun, 15 Dec 2013 20:57:20 +0000 (21:57 +0100)
modules/access_output/livehttp.c

index 608c122d589f9855a1db8e18aa0d3c0d30c1dcfe..517645af58a5f3f7f3242d2784fb6288503cea2e 100644 (file)
@@ -308,16 +308,23 @@ static int CryptSetup( sout_access_out_t *p_access, char *key_file )
     uint8_t key[16];
     char *keyfile = NULL;
 
+    if( !p_sys->key_uri ) /*No key uri, assume no encryption wanted*/
+    {
+        msg_Dbg( p_access, "No key uri, no encryption");
+        return VLC_SUCCESS;
+    }
+
     if( key_file )
         keyfile = strdup( key_file );
     else
         keyfile = var_InheritString( p_access, SOUT_CFG_PREFIX "key-file" );
 
-    if( !p_sys->key_uri ) /*No key uri, assume no encryption wanted*/
+    if( unlikely(keyfile == NULL) )
     {
-        msg_Dbg( p_access, "No key uri, no encryption");
-        return VLC_SUCCESS;
+        msg_Err( p_access, "No key-file, no encryption" );
+        return VLC_EGENERIC;
     }
+
     vlc_gcrypt_init();
 
     /*Setup encryption cipher*/
@@ -326,12 +333,7 @@ static int CryptSetup( sout_access_out_t *p_access, char *key_file )
     if( err )
     {
         msg_Err( p_access, "Openin AES Cipher failed: %s", gpg_strerror(err));
-        return VLC_EGENERIC;
-    }
-
-    if( unlikely(keyfile == NULL) )
-    {
-        msg_Err( p_access, "No key-file, no encryption" );
+        free( key_file );
         return VLC_EGENERIC;
     }
 
@@ -340,6 +342,7 @@ static int CryptSetup( sout_access_out_t *p_access, char *key_file )
     {
         msg_Err( p_access, "Unable to open keyfile %s: %m", keyfile );
         free( keyfile );
+        gcry_cipher_close( p_sys->aes_ctx );
         return VLC_EGENERIC;
     }
     free( keyfile );
@@ -350,6 +353,7 @@ static int CryptSetup( sout_access_out_t *p_access, char *key_file )
     if( keylen < 16 )
     {
         msg_Err( p_access, "No key at least 16 octects (you provided %zd), no encryption", keylen );
+        gcry_cipher_close( p_sys->aes_ctx );
         return VLC_EGENERIC;
     }
 
@@ -357,7 +361,7 @@ static int CryptSetup( sout_access_out_t *p_access, char *key_file )
     if(err)
     {
         msg_Err(p_access, "Setting AES key failed: %s", gpg_strerror(err));
-        gcry_cipher_close( p_sys->aes_ctx);
+        gcry_cipher_close( p_sys->aes_ctx );
         return VLC_EGENERIC;
     }