michael-o commented on code in PR #556: URL: https://github.com/apache/httpcomponents-client/pull/556#discussion_r1528332718
########## httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartEntityBuilder.java: ########## @@ -253,12 +253,13 @@ MultipartFormEntity buildEntity() { if (charsetCopy == null && contentType != null) { charsetCopy = contentType.getCharset(); } - final List<NameValuePair> paramsList = new ArrayList<>(2); - paramsList.add(new BasicNameValuePair("boundary", boundaryCopy)); - if (charsetCopy != null) { - paramsList.add(new BasicNameValuePair("charset", charsetCopy.name())); - } - final NameValuePair[] params = paramsList.toArray(EMPTY_NAME_VALUE_ARRAY); + // Previusly, "charset" parameter was added to the Content-Type header, however adding "charset=..." + // is not specified in RFC 7578, and it causes issues with (flawed?) HTTP servers. + // For instance: + // https://github.com/owasp-modsecurity/ModSecurity/commit/6e56950cdf258c9b39f12cf6eb014cb59797cfd3 + // https://github.com/akka/akka-http/issues/338 + // https://bz.apache.org/bugzilla/show_bug.cgi?id=61384 + final NameValuePair[] params = new NameValuePair[]{new BasicNameValuePair("boundary", boundaryCopy)}; Review Comment: This belongs into the commit message ########## httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartEntityBuilder.java: ########## @@ -88,7 +88,7 @@ public void testMultipartCustomContentType() throws Exception { .setLaxMode() .buildEntity(); Assertions.assertNotNull(entity); - Assertions.assertEquals("application/xml; boundary=blah-blah; charset=UTF-8", entity.getContentType()); + Assertions.assertEquals("application/xml; charset=UTF-8; boundary=blah-blah", entity.getContentType()); Review Comment: Regardless of your change, I question this test because a multipart request shall start with `multipart/` type... ########## httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartEntityBuilder.java: ########## @@ -130,7 +130,7 @@ public void testMultipartCustomContentTypeUsingAddParameter() { eb.buildEntity(); final MultipartFormEntity entity = eb.buildEntity(); Assertions.assertNotNull(entity); - Assertions.assertEquals("multipart/related; boundary=yada-yada; charset=US-ASCII; my=stuff", + Assertions.assertEquals("multipart/related; boundary=yada-yada; charset=ascii; my=stuff", entity.getContentType()); Review Comment: Same for these two... ########## httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartEntityBuilder.java: ########## @@ -99,7 +99,7 @@ public void testMultipartContentTypeParameter() throws Exception { new BasicNameValuePair("charset", "ascii"))) .buildEntity(); Assertions.assertNotNull(entity); - Assertions.assertEquals("multipart/form-data; boundary=yada-yada; charset=US-ASCII", entity.getContentType()); + Assertions.assertEquals("multipart/form-data; boundary=yada-yada; charset=ascii", entity.getContentType()); Review Comment: The charset shouldn't appear at all, no? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org