Commit 2c753633 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont
Browse files

gnutls: fix memory leaks

parent 6c122576
...@@ -499,7 +499,10 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key) ...@@ -499,7 +499,10 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key)
vlc_tls_creds_sys_t *sys = malloc (sizeof (*sys)); vlc_tls_creds_sys_t *sys = malloc (sizeof (*sys));
if (unlikely(sys == NULL)) if (unlikely(sys == NULL))
goto error; {
gnutls_Deinit ();
return VLC_ENOMEM;
}
/* Sets server's credentials */ /* Sets server's credentials */
val = gnutls_certificate_allocate_credentials (&sys->x509_cred); val = gnutls_certificate_allocate_credentials (&sys->x509_cred);
...@@ -507,7 +510,9 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key) ...@@ -507,7 +510,9 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key)
{ {
msg_Err (crd, "cannot allocate credentials: %s", msg_Err (crd, "cannot allocate credentials: %s",
gnutls_strerror (val)); gnutls_strerror (val));
goto error; free (sys);
gnutls_Deinit ();
return VLC_ENOMEM;
} }
block_t *certblock = block_FilePath (cert); block_t *certblock = block_FilePath (cert);
...@@ -515,7 +520,7 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key) ...@@ -515,7 +520,7 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key)
{ {
msg_Err (crd, "cannot read certificate chain from %s: %s", cert, msg_Err (crd, "cannot read certificate chain from %s: %s", cert,
vlc_strerror_c(errno)); vlc_strerror_c(errno));
return VLC_EGENERIC; goto error;
} }
block_t *keyblock = block_FilePath (key); block_t *keyblock = block_FilePath (key);
...@@ -524,7 +529,7 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key) ...@@ -524,7 +529,7 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key)
msg_Err (crd, "cannot read private key from %s: %s", key, msg_Err (crd, "cannot read private key from %s: %s", key,
vlc_strerror_c(errno)); vlc_strerror_c(errno));
block_Release (certblock); block_Release (certblock);
return VLC_EGENERIC; goto error;
} }
gnutls_datum_t pub = { gnutls_datum_t pub = {
...@@ -577,6 +582,7 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key) ...@@ -577,6 +582,7 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key)
return VLC_SUCCESS; return VLC_SUCCESS;
error: error:
gnutls_certificate_free_credentials (sys->x509_cred);
free (sys); free (sys);
gnutls_Deinit (); gnutls_Deinit ();
return VLC_EGENERIC; return VLC_EGENERIC;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment