imap: Fixed memory leak when performing multiple selects
authorSteve Holme <steve_holme@hotmail.com>
Fri, 22 Feb 2013 23:29:33 +0000 (23:29 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Fri, 22 Feb 2013 23:29:33 +0000 (23:29 +0000)
Moved the clean-up of the mailbox variable from imap_disconnect() to
imap_done() as this variable is allocated in the do phase, yet would
have only been freed only once if multiple selects where preformed
on a single connection.

lib/imap.c

index 8525c89..4621a8f 100644 (file)
@@ -1457,6 +1457,7 @@ static CURLcode imap_done(struct connectdata *conn, CURLcode status,
   CURLcode result = CURLE_OK;
   struct SessionHandle *data = conn->data;
   struct FTP *imap = data->state.proto.imap;
+  struct imap_conn *imapc= &conn->proto.imapc;
 
   (void)premature;
 
@@ -1473,6 +1474,9 @@ static CURLcode imap_done(struct connectdata *conn, CURLcode status,
     result = status;         /* use the already set error code */
   }
 
+  /* Cleanup our per-request based variables */
+  Curl_safefree(imapc->mailbox);
+
   /* Clear the transfer mode for the next connection */
   imap->transfer = FTPTRANSFER_BODY;
 
@@ -1604,9 +1608,6 @@ static CURLcode imap_disconnect(struct connectdata *conn, bool dead_connection)
   /* Cleanup the SASL module */
   Curl_sasl_cleanup(conn, imapc->authused);
 
-  /* Cleanup our connection based variables */
-  Curl_safefree(imapc->mailbox);
-
   return CURLE_OK;
 }