From a9a7b606c2341bb0fced33f5f00f45900beb9c8f Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 15 Mar 2018 00:27:20 +0100 Subject: transfer: make HTTP without headers count correct body size This is what "HTTP/0.9" basically looks like. Reported on IRC Closes #2382 --- lib/transfer.c | 2 +- tests/FILEFORMAT | 7 +++++-- tests/data/Makefile.inc | 2 +- tests/data/test1164 | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ tests/runtests.pl | 2 +- 5 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 tests/data/test1164 diff --git a/lib/transfer.c b/lib/transfer.c index fd9af3155..b5614f55f 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -717,7 +717,7 @@ static CURLcode readwrite_data(struct Curl_easy *data, #endif /* CURL_DISABLE_HTTP */ /* Account for body content stored in the header buffer */ - if(k->badheader && !k->ignorebody) { + if((k->badheader == HEADER_PARTHEADER) && !k->ignorebody) { DEBUGF(infof(data, "Increasing bytecount by %zu from hbuflen\n", k->hbuflen)); k->bytecount += k->hbuflen; diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT index 5426f333f..19862f2a4 100644 --- a/tests/FILEFORMAT +++ b/tests/FILEFORMAT @@ -293,8 +293,8 @@ command is run. They are cleared again after the command has been run. Variables are first substituted as in the section. - + command line to run, there's a bunch of %variables that get replaced accordingly. @@ -317,6 +317,9 @@ Set option="no-output" to prevent the test script to slap on the --output argument that directs the output to a file. The --output is also not added if the verify/stdout section is used. +Set option="force-output" to make use of --output even when the test is +otherwise written to verify stdout. + Set option="no-include" to prevent the test script to slap on the --include argument. diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index 97daf00ce..5fcffc6eb 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -129,7 +129,7 @@ test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \ test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \ test1152 test1153 test1154 \ \ -test1160 test1161 test1162 test1163 \ +test1160 test1161 test1162 test1163 test1164 \ test1170 test1171 \ test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \ test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \ diff --git a/tests/data/test1164 b/tests/data/test1164 new file mode 100644 index 000000000..061e395cc --- /dev/null +++ b/tests/data/test1164 @@ -0,0 +1,52 @@ + + + +HTTP +HTTP GET + + + +# +# Server-side + +# perl -e 'print "swsclose" . "\0" x 200;' | base64 +# 'swsclose' is there to force server to close after send + +c3dzY2xvc2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + +# +# Client-side + + +http + + +HTTP/0.9 GET and all zeroes + + +http://%HOSTIP:%HTTPPORT/1164 -w '%{size_download}\n' + + + +# +# Verify data after the test has been "shot" + + +^User-Agent:.* + + +GET /1164 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* + + + +208 + + + diff --git a/tests/runtests.pl b/tests/runtests.pl index d6aa5cac6..6503bf779 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -3909,7 +3909,7 @@ sub singletest { if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-output/)) { #We may slap on --output! - if (!@validstdout) { + if (!@validstdout || $cmdhash{'option'} =~ /force-output/) { $out=" --output $CURLOUT "; } } -- cgit v1.2.3