From: Daniel Stenberg Date: Sat, 13 Jan 2018 05:35:12 +0000 (+0100) Subject: smtp/pop3/imap_get_message: decrease the data length too... X-Git-Tag: curl-7_58_0~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8dd4edeb90ab7bb1df5339fd29422860bf86c585;p=thirdparty%2Fcurl.git smtp/pop3/imap_get_message: decrease the data length too... Follow-up commit to 615edc1f73 which was incomplete. Assisted-by: Max Dymond Detected by OSS-fuzz Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5206 --- diff --git a/lib/imap.c b/lib/imap.c index 63a998b2b9..cf278a22ba 100644 --- a/lib/imap.c +++ b/lib/imap.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2018, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -349,11 +349,13 @@ static void imap_get_message(char *buffer, char **outptr) if(len > 2) { /* Find the start of the message */ - for(message = buffer + 2; *message == ' ' || *message == '\t'; message++) + len -= 2; + for(message = buffer + 2; *message == ' ' || *message == '\t'; + message++, len--) ; /* Find the end of the message */ - for(len -= 2; len--;) + for(; len--;) if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' && message[len] != '\t') break; diff --git a/lib/pop3.c b/lib/pop3.c index 40dde10529..78f6afef1f 100644 --- a/lib/pop3.c +++ b/lib/pop3.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2018, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -248,11 +248,13 @@ static void pop3_get_message(char *buffer, char **outptr) if(len > 2) { /* Find the start of the message */ - for(message = buffer + 2; *message == ' ' || *message == '\t'; message++) + len -= 2; + for(message = buffer + 2; *message == ' ' || *message == '\t'; + message++, len--) ; /* Find the end of the message */ - for(len -= 2; len--;) + for(; len--;) if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' && message[len] != '\t') break; diff --git a/lib/smtp.c b/lib/smtp.c index b31ecb4b0f..d9f1a854aa 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2018, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -237,11 +237,13 @@ static void smtp_get_message(char *buffer, char **outptr) if(len > 4) { /* Find the start of the message */ - for(message = buffer + 4; *message == ' ' || *message == '\t'; message++) + len -= 4; + for(message = buffer + 4; *message == ' ' || *message == '\t'; + message++, len--) ; /* Find the end of the message */ - for(len -= 4; len--;) + for(; len--;) if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' && message[len] != '\t') break;