]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
smtp: Fixed inappropriate free of the scratch buffer
authorSteve Holme <steve_holme@hotmail.com>
Fri, 12 Dec 2014 18:55:16 +0000 (18:55 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Fri, 12 Dec 2014 19:15:10 +0000 (19:15 +0000)
If the scratch buffer was allocated in a previous call to
Curl_smtp_escape_eob(), a new buffer not allocated in the subsequent
call and no action taken by that call, then an attempt would be made to
try and free the buffer which, by now, would be part of the data->state
structure.

This bug was introduced in commit 4bd860a001.

lib/smtp.c

index 5c0b0a4955a3283f3f2650a6d1d688629c1e28e6..7b008060669599c7a1694681c4002103e970dcdb 100644 (file)
@@ -2321,6 +2321,7 @@ CURLcode Curl_smtp_escape_eob(struct connectdata *conn, const ssize_t nread)
   struct SessionHandle *data = conn->data;
   struct SMTP *smtp = data->req.protop;
   char *scratch = data->state.scratch;
+  char *newscratch = NULL;
   char *oldscratch = NULL;
   size_t eob_sent;
 
@@ -2328,8 +2329,8 @@ CURLcode Curl_smtp_escape_eob(struct connectdata *conn, const ssize_t nread)
   if(!scratch || data->set.crlf) {
     oldscratch = scratch;
 
-    scratch = malloc(2 * BUFSIZE);
-    if(!scratch) {
+    scratch = newscratch = malloc(2 * BUFSIZE);
+    if(!newscratch) {
       failf(data, "Failed to alloc scratch buffer!");
 
       return CURLE_OUT_OF_MEMORY;
@@ -2401,7 +2402,7 @@ CURLcode Curl_smtp_escape_eob(struct connectdata *conn, const ssize_t nread)
     data->req.upload_present = si;
   }
   else
-    Curl_safefree(scratch);
+    Curl_safefree(newscratch);
 
   return CURLE_OK;
 }