diff options
author | ng0 <ng0@n0.is> | 2018-01-21 22:37:57 +0000 |
---|---|---|
committer | ng0 <ng0@n0.is> | 2018-01-21 22:37:57 +0000 |
commit | cc5f34a99383aa99937d545f25eb1eb8cabe2ca1 (patch) | |
tree | f295bd95086d293679d9d4f0a97ce66c66dc2137 /lib/smtp.c | |
parent | 851483824fd0071cc8ac5454c475a90dfcb5f6c5 (diff) | |
parent | 9d82cde7b2bd839600041b9ca1f2f743cce23df2 (diff) | |
download | gnurl-cc5f34a99383aa99937d545f25eb1eb8cabe2ca1.tar.gz gnurl-cc5f34a99383aa99937d545f25eb1eb8cabe2ca1.tar.bz2 gnurl-cc5f34a99383aa99937d545f25eb1eb8cabe2ca1.zip |
Merge branch 'master' of https://github.com/curl/curl
Diffstat (limited to 'lib/smtp.c')
-rw-r--r-- | lib/smtp.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/lib/smtp.c b/lib/smtp.c index 76958603b..7fc76c956 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -232,23 +232,30 @@ static bool smtp_endofresp(struct connectdata *conn, char *line, size_t len, */ static void smtp_get_message(char *buffer, char **outptr) { - size_t len = 0; + size_t len = strlen(buffer); char *message = NULL; - /* Find the start of the message */ - for(message = buffer + 4; *message == ' ' || *message == '\t'; message++) - ; - - /* Find the end of the message */ - for(len = strlen(message); len--;) - if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' && - message[len] != '\t') - break; - - /* Terminate the message */ - if(++len) { - message[len] = '\0'; + if(len > 4) { + /* Find the start of the message */ + len -= 4; + for(message = buffer + 4; *message == ' ' || *message == '\t'; + message++, len--) + ; + + /* Find the end of the message */ + for(; len--;) + if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' && + message[len] != '\t') + break; + + /* Terminate the message */ + if(++len) { + message[len] = '\0'; + } } + else + /* junk input => zero length output */ + message = &buffer[len]; *outptr = message; } |