mirror of
https://github.com/curl/curl.git
synced 2026-08-25 18:23:44 +03:00
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:
parent
4401409468
commit
615edc1f73
7 changed files with 112 additions and 42 deletions
29
lib/imap.c
29
lib/imap.c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
29
lib/pop3.c
29
lib/pop3.c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
29
lib/smtp.c
29
lib/smtp.c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue