mime: latch last read callback status.

In case a read callback returns a status (pause, abort, eof,
error) instead of a byte count, drain the bytes read so far but
remember this status for further processing.
Takes care of not losing data when pausing, and properly resume a
paused mime structure when requested.
New tests 670-673 check unpausing cases, with easy or multi
interface and mime or form api.

Fixes #4813
Reported-by: MrdUkk on github
This commit is contained in:
Patrick Monnerat 2020-03-06 09:46:39 +01:00 committed by Daniel Stenberg
parent 3dce9849be
commit 96972ec1c0
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
13 changed files with 628 additions and 13 deletions

View file

@ -728,14 +728,10 @@ int curl_formget(struct curl_httppost *form, void *arg,
if(!nread)
break;
switch(nread) {
default:
if(append(arg, buffer, nread) != nread)
result = CURLE_READ_ERROR;
break;
case CURL_READFUNC_ABORT:
case CURL_READFUNC_PAUSE:
break;
if(nread > sizeof(buffer) || append(arg, buffer, nread) != nread) {
result = CURLE_READ_ERROR;
if(nread == CURL_READFUNC_ABORT)
result = CURLE_ABORTED_BY_CALLBACK;
}
}