Commit d68f215f authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

- "Tom" posted a bug report that mentioned how libcurl did wrong when doing a

  POST using a read callback, with Digest authentication and
  "Transfer-Encoding: chunked" enforced.  I would then cause the first request
  to be wrongly sent and then basically hang until the server closed the
  connection. I fixed the problem and added test case 565 to verify it.
parent 0a5ac52b
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -6,6 +6,13 @@

                                  Changelog

Daniel Stenberg (30 Oct 2009)
- "Tom" posted a bug report that mentioned how libcurl did wrong when doing a
  POST using a read callback, with Digest authentication and
  "Transfer-Encoding: chunked" enforced.  I would then cause the first request
  to be wrongly sent and then basically hang until the server closed the
  connection. I fixed the problem and added test case 565 to verify it.

Daniel Stenberg (25 Oct 2009)
- Dima Barsky made the curl cookie parser accept cookies even with blank or
  unparsable expiry dates and then treat them as session cookies - previously
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ This release includes the following bugfixes:
 o memory leak in SCP/SFTP connections
 o use pkg-config to find out libssh2 installation details in configure
 o unparsable cookie expire dates make cookies get treated as session coookies
 o POST with Digest authentication and "Transfer-Encoding: chunked"

This release includes the following known bugs:

+11 −1
Original line number Diff line number Diff line
@@ -2905,7 +2905,17 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
      if(result)
        return result;

      if(data->set.postfieldsize) {
      if(data->req.upload_chunky && conn->bits.authneg) {
        /* Chunky upload is selected and we're negotiating auth still, send
           end-of-data only */
        result = add_buffer(req_buffer,
                            "\x0d\x0a\x30\x0d\x0a\x0d\x0a", 7);
        /* CR  LF   0  CR  LF  CR  LF */
        if(result)
          return result;
      }

      else if(data->set.postfieldsize) {
        /* set the upload size to the progress meter */
        Curl_pgrsSetUploadSize(data, postsize?postsize:-1);

+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
 test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096   \
 test1097 test560 test561 test1098 test1099 test562 test563 test1100       \
 test564 test1101 test1102 test1103 test1104 test299 test310 test311       \
 test312 test1105
 test312 test1105 test565

filecheck:
	@mkdir test-place; \

tests/data/test565

0 → 100644
+104 −0
Original line number Diff line number Diff line
<testcase>
<info>
<keywords>
HTTP
HTTP POST
HTTP Digest auth
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Sun, 03 Apr 2005 14:57:45 GMT
X-Powered-By: ASP.NET

HTTP/1.1 401 authentication please swsbounce
Server: Microsoft-IIS/6.0
WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
Content-Type: text/html; charset=iso-8859-1
Content-Length: 0

</data>
<data1>
HTTP/1.1 200 A OK
Server: Microsoft-IIS/6.0
Content-Type: text/html; charset=iso-8859-1
Content-Length: 3

ok
</data1>
<datacheck>
HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Sun, 03 Apr 2005 14:57:45 GMT
X-Powered-By: ASP.NET

HTTP/1.1 401 authentication please swsbounce
Server: Microsoft-IIS/6.0
WWW-Authenticate: Digest realm="testrealm", nonce="1053604144"
Content-Type: text/html; charset=iso-8859-1
Content-Length: 0

HTTP/1.1 200 A OK
Server: Microsoft-IIS/6.0
Content-Type: text/html; charset=iso-8859-1
Content-Length: 3

ok
</datacheck>
</reply>

# Client-side
<client>
<server>
http
</server>
# tool is what to use instead of 'curl'
<tool>
lib565
</tool>

 <name>
send HTTP POST using read callback, chunked transfer-encoding and Digest
 </name>
 <command>
http://%HOSTIP:%HTTPPORT/565
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
POST /565 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded


0

POST /565 HTTP/1.1
Authorization: Digest username="foo", realm="testrealm", nonce="1053604144", uri="/565", response="877424f750af047634dbd94f9933217b"
Host: 127.0.0.1:8990
Accept: */*
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded

3
one
3
two
5
three
1d
and a final longer crap: four
0

</protocol>
</verify>
</testcase>
Loading