From 96972ec1c00a142e3859efc82a06b0b810527da2 Mon Sep 17 00:00:00 2001 From: Patrick Monnerat Date: Fri, 6 Mar 2020 09:46:39 +0100 Subject: 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 --- tests/data/Makefile.inc | 1 + tests/data/test644 | 1 + tests/data/test670 | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ tests/data/test671 | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ tests/data/test672 | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ tests/data/test673 | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 290 insertions(+) create mode 100644 tests/data/test670 create mode 100644 tests/data/test671 create mode 100644 tests/data/test672 create mode 100644 tests/data/test673 (limited to 'tests/data') diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index 9afbf7437..99052007f 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -86,6 +86,7 @@ test635 test636 test637 test638 test639 test640 test641 test642 \ test643 test644 test645 test646 test647 test648 test649 test650 test651 \ test652 test653 test654 test655 test656 test658 test659 test660 test661 \ test662 test663 test664 test665 \ +test670 test671 test672 test673 \ \ test700 test701 test702 test703 test704 test705 test706 test707 test708 \ test709 test710 test711 test712 test713 test714 test715 test716 test717 \ diff --git a/tests/data/test644 b/tests/data/test644 index 4c9a501ed..256d3379a 100644 --- a/tests/data/test644 +++ b/tests/data/test644 @@ -50,6 +50,7 @@ Content-Type: multipart/form-data; boundary=---------------------------- ------------------------------ Content-Disposition: form-data; name="sendfile"; filename="postit2.c" + # CURLE_ABORTED_BY_CALLBACK (42) diff --git a/tests/data/test670 b/tests/data/test670 new file mode 100644 index 000000000..19a51a4e0 --- /dev/null +++ b/tests/data/test670 @@ -0,0 +1,72 @@ + + + +HTTP +HTTP POST +MIME + + + +# +# Server-side + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + + +# Client-side + + +http + +# tool is what to use instead of 'curl' + +lib670 + + + +Request pause from mime read callback: multi + + +http://%HOSTIP:%HTTPPORT/670 + + + +# +# Verify data after the test has been "shot" + + +s/^--------------------------[a-z0-9]*/------------------------------/ +s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/ + + +POST /670 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* +Content-Length: 142 +Content-Type: multipart/form-data; boundary=---------------------------- + +------------------------------ +Content-Disposition: form-data; name="field" + +AB +-------------------------------- + + + diff --git a/tests/data/test671 b/tests/data/test671 new file mode 100644 index 000000000..eada50a6e --- /dev/null +++ b/tests/data/test671 @@ -0,0 +1,72 @@ + + + +HTTP +HTTP POST +MIME + + + +# +# Server-side + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + + +# Client-side + + +http + +# tool is what to use instead of 'curl' + +lib671 + + + +Request pause from mime read callback: easy + + +http://%HOSTIP:%HTTPPORT/671 + + + +# +# Verify data after the test has been "shot" + + +s/^--------------------------[a-z0-9]*/------------------------------/ +s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/ + + +POST /671 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* +Content-Length: 142 +Content-Type: multipart/form-data; boundary=---------------------------- + +------------------------------ +Content-Disposition: form-data; name="field" + +AB +-------------------------------- + + + diff --git a/tests/data/test672 b/tests/data/test672 new file mode 100644 index 000000000..9c5f24556 --- /dev/null +++ b/tests/data/test672 @@ -0,0 +1,72 @@ + + + +HTTP +HTTP POST +FORM + + + +# +# Server-side + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + + +# Client-side + + +http + +# tool is what to use instead of 'curl' + +lib672 + + + +Request pause from form read callback: multi + + +http://%HOSTIP:%HTTPPORT/672 + + + +# +# Verify data after the test has been "shot" + + +s/^--------------------------[a-z0-9]*/------------------------------/ +s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/ + + +POST /672 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* +Content-Length: 142 +Content-Type: multipart/form-data; boundary=---------------------------- + +------------------------------ +Content-Disposition: form-data; name="field" + +AB +-------------------------------- + + + diff --git a/tests/data/test673 b/tests/data/test673 new file mode 100644 index 000000000..efed2727b --- /dev/null +++ b/tests/data/test673 @@ -0,0 +1,72 @@ + + + +HTTP +HTTP POST +FORM + + + +# +# Server-side + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello + + + +# Client-side + + +http + +# tool is what to use instead of 'curl' + +lib673 + + + +Request pause from form read callback: easy + + +http://%HOSTIP:%HTTPPORT/673 + + + +# +# Verify data after the test has been "shot" + + +s/^--------------------------[a-z0-9]*/------------------------------/ +s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/ + + +POST /673 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* +Content-Length: 142 +Content-Type: multipart/form-data; boundary=---------------------------- + +------------------------------ +Content-Disposition: form-data; name="field" + +AB +-------------------------------- + + + -- cgit v1.2.3