diff options
author | Daniel Stenberg <daniel@haxx.se> | 2004-01-28 17:07:22 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2004-01-28 17:07:22 +0000 |
commit | 958987c214cacdfaad6fa960b39e0c917f43af2d (patch) | |
tree | c56329e40b0b015ab7d081dfdd8868a75643f456 | |
parent | ed75842df07357acde35c6edef39aa6e31d752a2 (diff) |
Chunked-transfers should have an additional CRLF after the final 0 CRLF
sequence.
-rw-r--r-- | lib/http.c | 4 | ||||
-rw-r--r-- | lib/transfer.c | 14 | ||||
-rw-r--r-- | tests/data/test56 | 1 |
3 files changed, 10 insertions, 9 deletions
diff --git a/lib/http.c b/lib/http.c index 0dcaf7866..c3862cded 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1614,8 +1614,8 @@ CURLcode Curl_http(struct connectdata *conn) /* Append the POST data chunky-style */ add_bufferf(req_buffer, "%x\r\n", postsize); add_buffer(req_buffer, data->set.postfields, postsize); - add_buffer(req_buffer, "\r\n0\r\n", 5); /* end of a chunked - transfer stream */ + add_buffer(req_buffer, "\r\n0\r\n\r\n", 7); /* end of a chunked + transfer stream */ } } else { diff --git a/lib/transfer.c b/lib/transfer.c index 3c2bf4baf..eb0c99452 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -152,16 +152,16 @@ static int fillbuffer(struct connectdata *conn, /* copy the prefix to the buffer */ memcpy(conn->upload_fromhere, hexbuffer, hexlen); - if(nread>hexlen) { - /* append CRLF to the data */ - memcpy(conn->upload_fromhere + - nread, "\r\n", 2); - nread+=2; - } - else { + + /* always append CRLF to the data */ + memcpy(conn->upload_fromhere + nread, "\r\n", 2); + + if((nread - hexlen) == 0) { /* mark this as done once this chunk is transfered */ conn->keep.upload_done = TRUE; } + + nread+=2; /* for the added CRLF */ } return nread; } diff --git a/tests/data/test56 b/tests/data/test56 index 78e29f62e..fa0a6e4d1 100644 --- a/tests/data/test56 +++ b/tests/data/test56 @@ -48,5 +48,6 @@ Content-Type: application/x-www-form-urlencoded c
we post this
0
+
</protocol> </verify> |