summaryrefslogtreecommitdiff
path: root/lib/smtp.c
diff options
context:
space:
mode:
authorng0 <ng0@n0.is>2018-01-21 22:37:57 +0000
committerng0 <ng0@n0.is>2018-01-21 22:37:57 +0000
commitcc5f34a99383aa99937d545f25eb1eb8cabe2ca1 (patch)
treef295bd95086d293679d9d4f0a97ce66c66dc2137 /lib/smtp.c
parent851483824fd0071cc8ac5454c475a90dfcb5f6c5 (diff)
parent9d82cde7b2bd839600041b9ca1f2f743cce23df2 (diff)
downloadgnurl-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.c37
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;
}