]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
deinitialize extra certs if they are empty.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 10 Jun 2012 00:15:05 +0000 (02:15 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 10 Jun 2012 00:15:05 +0000 (02:15 +0200)
lib/x509/pkcs12.c

index a595488b32ae36b877420fa8b06e298d51e3b7c1..47c10a15aad92c57af835d168d48db762eafaa5e 100644 (file)
@@ -1438,6 +1438,7 @@ gnutls_pkcs12_simple_parse (gnutls_pkcs12_t p12,
   uint8_t cert_id[20];
   uint8_t key_id[20];
   int privkey_ok = 0;
+  unsigned int i;
 
   *key = NULL;
   
@@ -1783,30 +1784,39 @@ done:
         gnutls_x509_privkey_deinit(*key);
       if (_extra_certs_len && _extra_certs != NULL)
         {
-          unsigned int i;
           for (i = 0; i < _extra_certs_len; i++)
             gnutls_x509_crt_deinit(_extra_certs[i]);
           gnutls_free(_extra_certs);
         }
       if (_chain_len && chain != NULL)
         {
-          unsigned int i;
           for (i = 0; i < _chain_len; i++)
             gnutls_x509_crt_deinit(_chain[i]);
           gnutls_free(_chain);
         }
+      
+      return ret;
     }
-  else 
+
+  if (extra_certs && _extra_certs_len > 0)
+    {
+      *extra_certs = _extra_certs;
+      *extra_certs_len = _extra_certs_len;
+    }
+  else
     {
       if (extra_certs) 
         {
-          *extra_certs = _extra_certs;
-          *extra_certs_len = _extra_certs_len;
+          *extra_certs = NULL;
+          *extra_certs_len = 0;
         }
-      
-      *chain = _chain;
-      *chain_len = _chain_len;
+      for (i = 0; i < _extra_certs_len; i++)
+        gnutls_x509_crt_deinit(_extra_certs[i]);
+      gnutls_free(_extra_certs);
     }
+      
+  *chain = _chain;
+  *chain_len = _chain_len;
 
   return ret;
 }