pop3: function could get the ->transfer field wrong

In pop3_perform(), pop3->transfer was derived from the old
data->req.no_body. Then, pop3_perform_command() re-computed
data->req.no_body.

Now we instead call pop3_perform_command() first.

Reported-by: Joshua Rogers
Closes #19039
This commit is contained in:
Daniel Stenberg 2025-10-13 08:41:38 +02:00
parent 27375ca364
commit 67c4256f7e
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2

View file

@ -1377,18 +1377,17 @@ static CURLcode pop3_perform(struct Curl_easy *data, bool *connected,
DEBUGF(infof(data, "DO phase starts"));
if(data->req.no_body) {
/* Requested no body means no transfer */
pop3->transfer = PPTRANSFER_INFO;
}
*dophase_done = FALSE; /* not done yet */
/* Start the first command in the DO phase */
/* Start the first command in the DO phase, may alter data->req.no_body */
result = pop3_perform_command(data);
if(result)
return result;
if(data->req.no_body)
/* Requested no body means no transfer */
pop3->transfer = PPTRANSFER_INFO;
*dophase_done = FALSE; /* not done yet */
/* Run the state-machine */
result = pop3_multi_statemach(data, dophase_done);
*connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);