summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2017-10-10 14:34:57 +0200
committerDaniel Stenberg <daniel@haxx.se>2017-10-10 22:56:50 +0200
commit38ab7b4ccb18f03c0323d412ff0f3613cd66f5e5 (patch)
treeb3feff493e4d2f36e4ea343698685cfd9fafe013
parentecf21c551fa3426579463abe34b623111b8d487c (diff)
downloadcurl-38ab7b4ccb18f03c0323d412ff0f3613cd66f5e5.tar.gz
smtp_done: free data before returning (on send failure)
... as otherwise it could leak that memory. Detected by OSS-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3600 Assisted-by: Max Dymond Closes #1977
-rw-r--r--lib/smtp.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/smtp.c b/lib/smtp.c
index de2dd3356..08d8148a3 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -1188,6 +1188,9 @@ static CURLcode smtp_done(struct connectdata *conn, CURLcode status,
if(!smtp || !pp->conn)
return CURLE_OK;
+ /* Cleanup our per-request based variables */
+ Curl_safefree(smtp->custom);
+
if(status) {
connclose(conn, "SMTP done with bad status"); /* marked for closure */
result = status; /* use the already set error code */
@@ -1246,9 +1249,6 @@ static CURLcode smtp_done(struct connectdata *conn, CURLcode status,
result = smtp_block_statemach(conn);
}
- /* Cleanup our per-request based variables */
- Curl_safefree(smtp->custom);
-
/* Clear the transfer mode for the next request */
smtp->transfer = FTPTRANSFER_BODY;