summaryrefslogtreecommitdiffstats
path: root/Utilities/cmcurl/lib/pop3.c
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2018-01-24 19:17:42 (GMT)
committerBrad King <brad.king@kitware.com>2018-01-24 19:18:16 (GMT)
commitcd8e31a1bf7429514078c2923a1a9580113f9d4f (patch)
tree6a0b8a01e3e0e52bb4b3abb66ce9e992614af6a7 /Utilities/cmcurl/lib/pop3.c
parente9c8ea75575afdb4e87b262641ee4071ef42b4c6 (diff)
parentaf9e654045f11028e50dac4781e297834129a749 (diff)
downloadCMake-cd8e31a1bf7429514078c2923a1a9580113f9d4f.zip
CMake-cd8e31a1bf7429514078c2923a1a9580113f9d4f.tar.gz
CMake-cd8e31a1bf7429514078c2923a1a9580113f9d4f.tar.bz2
Merge branch 'upstream-curl' into update-curl
* upstream-curl: curl 2018-01-23 (d6c21c8e)
Diffstat (limited to 'Utilities/cmcurl/lib/pop3.c')
-rw-r--r--Utilities/cmcurl/lib/pop3.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/Utilities/cmcurl/lib/pop3.c b/Utilities/cmcurl/lib/pop3.c
index 5792a4a..78f6afe 100644
--- a/Utilities/cmcurl/lib/pop3.c
+++ b/Utilities/cmcurl/lib/pop3.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
@@ -243,23 +243,30 @@ static bool pop3_endofresp(struct connectdata *conn, char *line, size_t len,
*/
static void pop3_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 + 2; *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 > 2) {
+ /* Find the start of the message */
+ len -= 2;
+ for(message = buffer + 2; *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;
}