From f959d44ec77d190821aa8f3a096fdeebd940bfe6 Mon Sep 17 00:00:00 2001 From: Oleg Kalnichevski Date: Sat, 30 Sep 2017 23:35:41 +0200 Subject: [PATCH] Deprecated Content-Transfer-Encoding field in MIME body parts per RFC 7578, section 4.7 --- .../client5/http/entity/mime/ByteArrayBody.java | 1 + .../http/entity/mime/ContentDescriptor.java | 3 +++ .../http/entity/mime/FormBodyPartBuilder.java | 4 ---- .../apache/hc/client5/http/entity/mime/MIME.java | 4 ++++ .../http/entity/mime/TestFormBodyPartBuilder.java | 15 +++++---------- .../entity/mime/TestMultipartContentBody.java | 4 ---- .../entity/mime/TestMultipartEntityBuilder.java | 2 -- .../http/entity/mime/TestMultipartForm.java | 15 --------------- 8 files changed, 13 insertions(+), 35 deletions(-) diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ByteArrayBody.java b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ByteArrayBody.java index 54e63ad22..f3a56ba11 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ByteArrayBody.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ByteArrayBody.java @@ -87,6 +87,7 @@ public String getCharset() { } @Override + @Deprecated public String getTransferEncoding() { return MIME.ENC_BINARY; } diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ContentDescriptor.java b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ContentDescriptor.java index d000a92cc..cb977ce79 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ContentDescriptor.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/ContentDescriptor.java @@ -76,7 +76,10 @@ public interface ContentDescriptor { * Returns the body descriptors transfer encoding. * @return The transfer encoding. Must not be null, but "7bit", * if no transfer-encoding was specified. + * + * @deprecated Deprecated per RFC 7578, section 4.7. Do not use */ + @Deprecated String getTransferEncoding(); /** diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java index b3c5e4998..d2610e2fe 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java @@ -137,10 +137,6 @@ public FormBodyPart build() { headerCopy.addField(new MinimalField(MIME.CONTENT_TYPE, buffer.toString())); } } - if (headerCopy.getField(MIME.CONTENT_TRANSFER_ENC) == null) { - // TE cannot be null - headerCopy.addField(new MinimalField(MIME.CONTENT_TRANSFER_ENC, body.getTransferEncoding())); - } return new FormBodyPart(this.name, this.body, headerCopy); } diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MIME.java b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MIME.java index ebb5b8485..53e165435 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MIME.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MIME.java @@ -34,6 +34,10 @@ public final class MIME { public static final String CONTENT_TYPE = "Content-Type"; + /** + * @deprecated Deprecated per RFC 7578, section 4.7. Do not use + */ + @Deprecated public static final String CONTENT_TRANSFER_ENC = "Content-Transfer-Encoding"; public static final String CONTENT_DISPOSITION = "Content-Disposition"; diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestFormBodyPartBuilder.java b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestFormBodyPartBuilder.java index e333b5f3e..ab99a26a3 100644 --- a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestFormBodyPartBuilder.java +++ b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestFormBodyPartBuilder.java @@ -51,8 +51,7 @@ public void testBuildBodyPartBasics() throws Exception { Assert.assertNotNull(header); assertFields(Arrays.asList( new MinimalField("Content-Disposition", "form-data; name=\"blah\""), - new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1"), - new MinimalField("Content-Transfer-Encoding", "8bit")), + new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1")), header.getFields()); } @@ -71,8 +70,7 @@ public void testBuildBodyPartMultipleBuilds() throws Exception { Assert.assertNotNull(header1); assertFields(Arrays.asList( new MinimalField("Content-Disposition", "form-data; name=\"blah\""), - new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1"), - new MinimalField("Content-Transfer-Encoding", "8bit")), + new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1")), header1.getFields()); final FileBody fileBody = new FileBody(new File("/path/stuff.bin"), ContentType.DEFAULT_BINARY); final FormBodyPart bodyPart2 = builder @@ -87,8 +85,7 @@ public void testBuildBodyPartMultipleBuilds() throws Exception { Assert.assertNotNull(header2); assertFields(Arrays.asList( new MinimalField("Content-Disposition", "form-data; name=\"yada\"; filename=\"stuff.bin\""), - new MinimalField("Content-Type", "application/octet-stream"), - new MinimalField("Content-Transfer-Encoding", "binary")), + new MinimalField("Content-Type", "application/octet-stream")), header2.getFields()); } @@ -117,8 +114,7 @@ public void testBuildBodyPartCustomHeaders() throws Exception { new MinimalField("header3", "blah"), new MinimalField("header3", "blah"), new MinimalField("Content-Disposition", "form-data; name=\"blah\""), - new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1"), - new MinimalField("Content-Transfer-Encoding", "8bit")), + new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1")), header1.getFields()); final FormBodyPart bodyPart2 = builder @@ -134,8 +130,7 @@ public void testBuildBodyPartCustomHeaders() throws Exception { new MinimalField("header1", "blah"), new MinimalField("header2", "yada"), new MinimalField("Content-Disposition", "form-data; name=\"blah\""), - new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1"), - new MinimalField("Content-Transfer-Encoding", "8bit")), + new MinimalField("Content-Type", "text/plain; charset=ISO-8859-1")), header2.getFields()); final FormBodyPart bodyPart3 = builder diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartContentBody.java b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartContentBody.java index 37590fd31..3b426fd49 100644 --- a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartContentBody.java +++ b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartContentBody.java @@ -85,8 +85,6 @@ public void testInputStreamBody() throws Exception { Assert.assertEquals("application", b1.getMediaType()); Assert.assertEquals("octet-stream", b1.getSubType()); - Assert.assertEquals(MIME.ENC_BINARY, b1.getTransferEncoding()); - final InputStreamBody b2 = new InputStreamBody( new ByteArrayInputStream(stuff), ContentType.create("some/stuff"), "stuff"); Assert.assertEquals(-1, b2.getContentLength()); @@ -95,8 +93,6 @@ public void testInputStreamBody() throws Exception { Assert.assertEquals("some/stuff", b2.getMimeType()); Assert.assertEquals("some", b2.getMediaType()); Assert.assertEquals("stuff", b2.getSubType()); - - Assert.assertEquals(MIME.ENC_BINARY, b2.getTransferEncoding()); } } diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartEntityBuilder.java b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartEntityBuilder.java index 618289909..e2e828584 100644 --- a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartEntityBuilder.java +++ b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartEntityBuilder.java @@ -140,7 +140,6 @@ public void testMultipartWriteTo() throws Exception { Assert.assertEquals("--xxxxxxxxxxxxxxxxxxxxxxxx\r\n" + "Content-Disposition: multipart/form-data; name=\"test\"; filename=\"hello world\"\r\n" + "Content-Type: text/plain; charset=ISO-8859-1\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "hello world\r\n" + "--xxxxxxxxxxxxxxxxxxxxxxxx--\r\n", out.toString(StandardCharsets.US_ASCII.name())); @@ -167,7 +166,6 @@ public void testMultipartWriteToRFC7578Mode() throws Exception { Assert.assertEquals("--xxxxxxxxxxxxxxxxxxxxxxxx\r\n" + "Content-Disposition: multipart/form-data; name=\"test\"; filename=\"hello%20%CE%BA%CF%8C%CF%83%CE%BC%CE%B5!%25\"\r\n" + "Content-Type: text/plain; charset=ISO-8859-1\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "hello world\r\n" + "--xxxxxxxxxxxxxxxxxxxxxxxx--\r\n", out.toString(StandardCharsets.US_ASCII.name())); diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartForm.java b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartForm.java index 8c729b7b0..90bf5caa8 100644 --- a/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartForm.java +++ b/httpclient5/src/test/java/org/apache/hc/client5/http/entity/mime/TestMultipartForm.java @@ -75,19 +75,16 @@ public void testMultipartFormStringParts() throws Exception { "--foo\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n" + "Content-Type: text/plain; charset=ISO-8859-1\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "this stuff\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field2\"\r\n" + "Content-Type: text/plain; charset=UTF-8\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "that stuff\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field3\"\r\n" + "Content-Type: text/plain; charset=ISO-8859-1\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "all kind of stuff\r\n" + "--foo--\r\n"; @@ -115,13 +112,11 @@ public void testMultipartFormCustomContentType() throws Exception { "--foo\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n" + "Content-Type: text/plain; charset=ISO-8859-1\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "this stuff\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field2\"\r\n" + "Content-Type: stuff/plain; param=value\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n" + "that stuff\r\n" + "--foo--\r\n"; @@ -156,14 +151,12 @@ public void testMultipartFormBinaryParts() throws Exception { "Content-Disposition: form-data; name=\"field1\"; " + "filename=\"" + tmpfile.getName() + "\"\r\n" + "Content-Type: application/octet-stream\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field2\"; " + "filename=\"file.tmp\"\r\n" + "Content-Type: application/octet-stream\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo--\r\n"; @@ -201,21 +194,18 @@ public void testMultipartFormStrict() throws Exception { "Content-Disposition: form-data; name=\"field1\"; " + "filename=\"" + tmpfile.getName() + "\"\r\n" + "Content-Type: application/octet-stream\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field2\"; " + "filename=\"test-file\"\r\n" + "Content-Type: text/plain; charset=US-ASCII\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field3\"; " + "filename=\"file.tmp\"\r\n" + "Content-Type: application/octet-stream\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo--\r\n"; @@ -253,21 +243,18 @@ public void testMultipartFormRFC6532() throws Exception { "Content-Disposition: form-data; name=\"field1\u0414\"; " + "filename=\"" + tmpfile.getName() + "\"\r\n" + "Content-Type: application/octet-stream\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field2\"; " + "filename=\"test-file\"\r\n" + "Content-Type: text/plain; charset=US-ASCII\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field3\"; " + "filename=\"file.tmp\"\r\n" + "Content-Type: application/octet-stream\r\n" + - "Content-Transfer-Encoding: binary\r\n" + "\r\n" + "some random whatever\r\n" + "--foo--\r\n"; @@ -364,14 +351,12 @@ public void testMultipartFormStringPartsMultiCharsets() throws Exception { "--foo\r\n" + "Content-Disposition: form-data; name=\"field1\"\r\n" + "Content-Type: text/plain; charset=ISO-8859-1\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n").getBytes(StandardCharsets.US_ASCII)); out2.write(s1.getBytes(StandardCharsets.ISO_8859_1)); out2.write(("\r\n" + "--foo\r\n" + "Content-Disposition: form-data; name=\"field2\"\r\n" + "Content-Type: text/plain; charset=KOI8-R\r\n" + - "Content-Transfer-Encoding: 8bit\r\n" + "\r\n").getBytes(StandardCharsets.US_ASCII)); out2.write(s2.getBytes(Charset.forName("KOI8-R"))); out2.write(("\r\n" +