diff options
author | Daniel Stenberg <daniel@haxx.se> | 2020-10-30 11:29:22 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-10-31 23:46:27 +0100 |
commit | 584ccb5ef2488d589bc7589aef70227a98b080a2 (patch) | |
tree | 282da85afc56d7c95f240c4e6ad10592e43a00d5 | |
parent | 1144886f38fd0811b29c9ea0f39133f47e7cc3fe (diff) | |
download | curl-584ccb5ef2488d589bc7589aef70227a98b080a2.tar.gz |
http: pass correct header size to debug callback for chunked post
... when the chunked framing was added, the size of the "body part" of
the data was calculated wrongly so the debug callback would get told a
header chunk a few bytes too big that would also contain the first few
bytes of the request body.
Reported-by: Dirk Wetter
Ref: #6144
Closes #6147
-rw-r--r-- | lib/http.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/http.c b/lib/http.c index a5f42eb97..d775c0b39 100644 --- a/lib/http.c +++ b/lib/http.c @@ -2873,20 +2873,24 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) } else { if(postsize) { + char chunk[16]; /* Append the POST data chunky-style */ - result = Curl_dyn_addf(&req, "%x\r\n", (int)postsize); + msnprintf(chunk, sizeof(chunk), "%x\r\n", (int)postsize); + result = Curl_dyn_add(&req, chunk); if(!result) { + included_body = postsize + strlen(chunk); result = Curl_dyn_addn(&req, data->set.postfields, (size_t)postsize); if(!result) result = Curl_dyn_add(&req, "\r\n"); - included_body = postsize + 2; + included_body += 2; } } - if(!result) + if(!result) { result = Curl_dyn_add(&req, "\x30\x0d\x0a\x0d\x0a"); - /* 0 CR LF CR LF */ - included_body += 5; + /* 0 CR LF CR LF */ + included_body += 5; + } } if(result) return result; |