imap: Added stricter parsing of continuation responses
authorJiri Hruska <jirka@fud.cz>
Sun, 24 Feb 2013 13:54:25 +0000 (14:54 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 24 Feb 2013 14:38:54 +0000 (14:38 +0000)
Enhanced the parsing to only allow continuation responses in some
states.

lib/imap.c

index 7d978b6..d135ba9 100644 (file)
@@ -356,7 +356,25 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len,
   /* Do we have a continuation response? */
   if((len == 3 && !memcmp("+", line, 1)) ||
      (len >= 2 && !memcmp("+ ", line, 2))) {
-    *resp = '+';
+    switch(imapc->state) {
+      /* States which are interested in continuation responses */
+      case IMAP_AUTHENTICATE_PLAIN:
+      case IMAP_AUTHENTICATE_LOGIN:
+      case IMAP_AUTHENTICATE_LOGIN_PASSWD:
+      case IMAP_AUTHENTICATE_CRAMMD5:
+      case IMAP_AUTHENTICATE_DIGESTMD5:
+      case IMAP_AUTHENTICATE_DIGESTMD5_RESP:
+      case IMAP_AUTHENTICATE_NTLM:
+      case IMAP_AUTHENTICATE_NTLM_TYPE2MSG:
+      case IMAP_AUTHENTICATE:
+        *resp = '+';
+        break;
+
+      default:
+        failf(conn->data, "Unexpected continuation response");
+        *resp = -1;
+        break;
+    }
 
     return TRUE;
   }