From: Jiri Hruska Date: Sun, 24 Feb 2013 11:48:43 +0000 (+0100) Subject: imap: Added stricter parsing of tagged command responses X-Git-Tag: curl-7_30_0~277 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=66149248ba8af1f711c6cb6b1522b050515ad529;p=thirdparty%2Fcurl.git imap: Added stricter parsing of tagged command responses Enhanced the parsing of tagged responses which must start with "OK", "NO" or "BAD" --- diff --git a/lib/imap.c b/lib/imap.c index 3a9ee45a94..559ae0bbaa 100644 --- a/lib/imap.c +++ b/lib/imap.c @@ -335,8 +335,19 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len, size_t wordlen; /* Do we have a tagged command response? */ - if(len >= id_len + 3 && !memcmp(id, line, id_len) && line[id_len] == ' ') { - *resp = line[id_len + 1]; /* O, N or B */ + if(len >= id_len + 1 && !memcmp(id, line, id_len) && line[id_len] == ' ') { + len = len - id_len - 1; + + if(len >= 2 && !memcmp(line + id_len + 1, "OK", 2)) + *resp = 'O'; + else if(len >= 2 && !memcmp(line + id_len + 1, "NO", 2)) + *resp = 'N'; + else if(len >= 3 && !memcmp(line + id_len + 1, "BAD", 3)) + *resp = 'B'; + else { + failf(conn->data, "Bad tagged response"); + *resp = -1; + } return TRUE; }