]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
http: pass correct header size to debug callback for chunked post
authorDaniel Stenberg <daniel@haxx.se>
Fri, 30 Oct 2020 10:29:22 +0000 (11:29 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 31 Oct 2020 22:46:27 +0000 (23:46 +0100)
... 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

lib/http.c

index a5f42eb977a8d35f86ed813a99bb6943a32a63d8..d775c0b39fd0f4233d6718514c81b3043879cbfd 100644 (file)
@@ -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;