lib: move mimepost data from ->req.p.http to ->state

When the legacy CURLOPT_HTTPPOST option is used, it gets converted into
the modem mimpost struct at first use. This data is (now) kept for the
entire transfer and not only per single HTTP request. This re-enables
rewind in the beginning of the second request instead of in end of the
first, as brought by 1b39731.

The request struct is per-request data only.

Extend test 650 to verify.

Fixes #11680
Reported-by: yushicheng7788 on github
Closes #11682
This commit is contained in:
Daniel Stenberg 2023-08-16 10:43:02 +02:00
parent 821d108fc9
commit 74b87a8af1
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
9 changed files with 157 additions and 45 deletions

View file

@ -10,15 +10,26 @@ FORM
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
<data nocheck="yes">
HTTP/1.1 301 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake swsclose
Connection: close
Content-Type: text/html
Location: /%TESTNUMBER0002
hello
</data>
<data2 crlf="yes">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 6
Connection: close
Content-Type: text/html
-foo-
</data>
</reply>
# Client-side
@ -35,7 +46,7 @@ lib%TESTNUMBER
</tool>
<name>
HTTP formpost using form API
HTTP formpost using form API - with redirect and re-POST
</name>
<stdin>
Some data from stdin
@ -134,6 +145,90 @@ Content-Disposition: form-data; name="standardinput"
Content-Type: application/octet-stream
16
Some data from stdin
30
--------------------------------
0
POST /%TESTNUMBER0002 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue
361
------------------------------
Content-Disposition: form-data; name="fieldname"
Content-Type: text/plain
X-customheader-1: Header 1 data
X-customheader-2: Header 2 data
this is what we post to the silly web server
------------------------------
Content-Disposition: form-data; name="fieldnam"
uhis is what we post to the silly web serve
------------------------------
Content-Disposition: form-data; name="multifile"
Content-Type: multipart/mixed; boundary=----------------------------
------------------------------
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
Content-Type: application/octet-stream
This is data from a file.
------------------------------
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
Content-Type: text/whatever
%if hyper
A5
%else
a5
%endif
This is data from a file.
------------------------------
Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
Content-Type: text/whatever
%if hyper
AF
%else
af
%endif
This is data from a file.
--------------------------------
------------------------------
Content-Disposition: form-data; name="filecontents"
%if hyper
10F
%else
10f
%endif
This is data from a file.
------------------------------
Content-Disposition: form-data; name="formlength"
1367
------------------------------
Content-Disposition: form-data; name="standardinput"
Content-Type: application/octet-stream
16
Some data from stdin