sasl_getmesssage: make sure we have a long enough string to pass

For pop3/imap/smtp, added test 891 to somewhat verify the pop3
case.

For this, I enhanced the pingpong test server to be able to send back
responses with LF-only instead of always using CRLF.

Closes #2150
This commit is contained in:
Daniel Stenberg 2017-12-01 00:45:46 +01:00
parent 4401409468
commit 615edc1f73
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
7 changed files with 112 additions and 42 deletions

View file

@ -344,23 +344,28 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len,
*/
static void imap_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++)
;
if(len > 2) {
/* 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;
/* Find the end of the message */
for(len -= 2; len--;)
if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
message[len] != '\t')
break;
/* Terminate the message */
if(++len) {
message[len] = '\0';
/* Terminate the message */
if(++len) {
message[len] = '\0';
}
}
else
/* junk input => zero length output */
message = &buffer[len];
*outptr = message;
}

View file

@ -243,23 +243,28 @@ 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++)
;
if(len > 2) {
/* 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;
/* Find the end of the message */
for(len -= 2; len--;)
if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
message[len] != '\t')
break;
/* Terminate the message */
if(++len) {
message[len] = '\0';
/* Terminate the message */
if(++len) {
message[len] = '\0';
}
}
else
/* junk input => zero length output */
message = &buffer[len];
*outptr = message;
}

View file

@ -232,23 +232,28 @@ 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++)
;
if(len > 4) {
/* 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;
/* Find the end of the message */
for(len -= 4; len--;)
if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
message[len] != '\t')
break;
/* Terminate the message */
if(++len) {
message[len] = '\0';
/* Terminate the message */
if(++len) {
message[len] = '\0';
}
}
else
/* junk input => zero length output */
message = &buffer[len];
*outptr = message;
}