mirror of
https://github.com/curl/curl.git
synced 2026-07-24 17:17:22 +03:00
pop3: Fixed processing of more than one response when sent in same packet
Added a loop to pop3_statemach_act() in which Curl_pp_readresp() is called until the cache is drained. Without this multiple responses received in a single packet could result in a hang or delay.
This commit is contained in:
parent
94d820b4cb
commit
0452976711
1 changed files with 9 additions and 6 deletions
15
lib/pop3.c
15
lib/pop3.c
|
|
@ -1376,12 +1376,15 @@ static CURLcode pop3_statemach_act(struct connectdata *conn)
|
|||
if(pp->sendleft)
|
||||
return Curl_pp_flushsend(pp);
|
||||
|
||||
/* Read the response from the server */
|
||||
result = Curl_pp_readresp(sock, pp, &pop3code, &nread);
|
||||
if(result)
|
||||
return result;
|
||||
do {
|
||||
/* Read the response from the server */
|
||||
result = Curl_pp_readresp(sock, pp, &pop3code, &nread);
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
if(!pop3code)
|
||||
break;
|
||||
|
||||
if(pop3code) {
|
||||
/* We have now received a full POP3 server response */
|
||||
switch(pop3c->state) {
|
||||
case POP3_SERVERGREET:
|
||||
|
|
@ -1471,7 +1474,7 @@ static CURLcode pop3_statemach_act(struct connectdata *conn)
|
|||
state(conn, POP3_STOP);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while(!result && pop3c->state != POP3_STOP && Curl_pp_moredata(pp));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue