]> granicus.if.org Git - curl/commitdiff
nss: avoid memory leak on SSL connection failure
authorKamil Dudka <kdudka@redhat.com>
Thu, 17 Feb 2011 16:37:24 +0000 (17:37 +0100)
committerKamil Dudka <kdudka@redhat.com>
Thu, 17 Feb 2011 16:57:16 +0000 (17:57 +0100)
RELEASE-NOTES
lib/nss.c

index 63bb75d133768a0b069f7aa6e5184ab3494ec0f2..ccd2eba80f1fd4c44c65c22e27736835f52328ce 100644 (file)
@@ -13,6 +13,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o nss: avoid memory leak on SSL connection failure
  o 
 
 This release includes the following known bugs:
index e115ac9121ef5be165ee1260f2005b476b40bf24..d26ad5b7842305c76328422676b49626a0ef47c7 100644 (file)
--- a/lib/nss.c
+++ b/lib/nss.c
@@ -1058,6 +1058,7 @@ void Curl_nss_close(struct connectdata *conn, int sockindex)
 #ifdef HAVE_PK11_CREATEGENERICOBJECT
     /* destroy all NSS objects in order to avoid failure of NSS shutdown */
     Curl_llist_destroy(connssl->obj_list, NULL);
+    connssl->obj_list = NULL;
 #endif
     connssl->handle = NULL;
   }
@@ -1216,7 +1217,7 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
   /* make the socket nonblocking */
   sock_opt.option = PR_SockOpt_Nonblocking;
   sock_opt.value.non_blocking = PR_TRUE;
-  if(PR_SetSocketOption(model, &sock_opt) != SECSuccess)
+  if(PR_SetSocketOption(model, &sock_opt) != PR_SUCCESS)
     goto error;
 
   if(SSL_OptionSet(model, SSL_SECURITY, PR_TRUE) != SECSuccess)
@@ -1407,6 +1408,12 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
   if(model)
     PR_Close(model);
 
+#ifdef HAVE_PK11_CREATEGENERICOBJECT
+    /* cleanup on connection failure */
+    Curl_llist_destroy(connssl->obj_list, NULL);
+    connssl->obj_list = NULL;
+#endif
+
   if (ssl3 && tlsv1 && isTLSIntoleranceError(err)) {
     /* schedule reconnect through Curl_retry_request() */
     data->state.ssl_connect_retry = TRUE;