From 958987c214cacdfaad6fa960b39e0c917f43af2d Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 28 Jan 2004 17:07:22 +0000 Subject: [PATCH] Chunked-transfers should have an additional CRLF after the final 0 CRLF sequence. --- lib/http.c | 4 ++-- lib/transfer.c | 14 +++++++------- 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 +