From: Steve Holme <steve_holme@hotmail.com>
Date: Sat, 9 Feb 2013 00:22:25 +0000 (+0000)
Subject: smtp: Fixed an issue when processing EHLO failure responses
X-Git-Tag: curl-7_30_0~395
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=23d17190ee3273b0718e0ca62f73bacf257088cf;p=curl

smtp: Fixed an issue when processing EHLO failure responses

Fixed a small issue where smtp_endofresp() would look for capabilities
in the description part of a failure response. In theory a server
shouldn't respond with SIZE or AUTH in an EHLO command's failure
response but if it did then capabilities would be unnecessarily set
before eventually failing.
---

diff --git a/lib/smtp.c b/lib/smtp.c
index 86d45d12c..c967bbd68 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -213,17 +213,18 @@ static int smtp_endofresp(struct pingpong *pp, int *resp)
   size_t len = pp->nread_resp;
   struct connectdata *conn = pp->conn;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
-  int result;
   size_t wordlen;
 
   if(len < 4 || !ISDIGIT(line[0]) || !ISDIGIT(line[1]) || !ISDIGIT(line[2]))
     return FALSE;       /* Nothing for us */
 
-  /* Extract the response code if necessary */
-  if((result = (line[3] == ' ')) != 0)
+  /* Do we have a command response? */
+  if(line[3] == ' ') {
     *resp = curlx_sltosi(strtol(line, NULL, 10));
+    return TRUE;
+  }
 
-  /* Are we processing EHLO command responses? */
+  /* Are we processing EHLO command data? */
   if(smtpc->state == SMTP_EHLO) {
     line += 4;
     len -= 4;
@@ -276,7 +277,7 @@ static int smtp_endofresp(struct pingpong *pp, int *resp)
     }
   }
 
-  return result;
+  return FALSE;
 }
 
 /* This is the ONLY way to change SMTP state! */