Skip to content

Commit

Permalink
FILEUPLOAD-312 - Use charset constant
Browse files Browse the repository at this point in the history
  • Loading branch information
arturobernalg committed Apr 22, 2021
1 parent b825323 commit dc30745
Show file tree
Hide file tree
Showing 13 changed files with 52 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import static java.lang.String.format;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
Expand Down Expand Up @@ -423,11 +423,7 @@ public byte[] getBoundary(final String contentType) {
return null;
}
byte[] boundary;
try {
boundary = boundaryStr.getBytes("ISO-8859-1");
} catch (final UnsupportedEncodingException e) {
boundary = boundaryStr.getBytes(); // Intentionally falls back to default charset
}
boundary = boundaryStr.getBytes(StandardCharsets.ISO_8859_1);
return boundary;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
Expand Down Expand Up @@ -237,7 +238,7 @@ private static String decodeWord(final String word) throws ParseException, Unsup
// the decoder writes directly to an output stream.
final ByteArrayOutputStream out = new ByteArrayOutputStream(encodedText.length());

final byte[] encodedData = encodedText.getBytes(US_ASCII_CHARSET);
final byte[] encodedData = encodedText.getBytes(StandardCharsets.US_ASCII);

// Base64 encoded?
if (encoding.equals(BASE64_ENCODING_MARKER)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.junit.jupiter.api.Assertions.*;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -84,7 +85,7 @@ public void testMoveFile() throws Exception {
"This is the content of the file\n" +
"\r\n" +
"-----1234--\r\n";
final byte[] contentBytes = content.getBytes("US-ASCII");
final byte[] contentBytes = content.getBytes(StandardCharsets.US_ASCII);
final HttpServletRequest request = new MockHttpServletRequest(contentBytes, Constants.CONTENT_TYPE);
final List<FileItem> items = myUpload.parseRequest(request);
assertNotNull(items);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Stream;

Expand Down Expand Up @@ -220,7 +221,7 @@ public void testFILEUPLOAD62(final FileUpload upload) throws Exception {
"...contents of file2.gif...\r\n" +
"--BbC04y--\r\n" +
"--AaB03x--";
final List<FileItem> fileItems = Util.parseUpload(upload, request.getBytes("US-ASCII"), contentType);
final List<FileItem> fileItems = Util.parseUpload(upload, request.getBytes(StandardCharsets.US_ASCII), contentType);
assertEquals(3, fileItems.size());
final FileItem item0 = fileItems.get(0);
assertEquals("field1", item0.getFieldName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

import org.apache.commons.fileupload2.servlet.ServletFileUpload;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -77,13 +78,13 @@ public void testProgressListener() throws Exception {
final String header = "-----1234\r\n"
+ "Content-Disposition: form-data; name=\"field" + (i+1) + "\"\r\n"
+ "\r\n";
baos.write(header.getBytes("US-ASCII"));
baos.write(header.getBytes(StandardCharsets.US_ASCII));
for (int j = 0; j < 16384+i; j++) {
baos.write((byte) j);
}
baos.write("\r\n".getBytes("US-ASCII"));
baos.write("\r\n".getBytes(StandardCharsets.US_ASCII));
}
baos.write("-----1234--\r\n".getBytes("US-ASCII"));
baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII));
final byte[] contents = baos.toByteArray();

MockHttpServletRequest request = new MockHttpServletRequest(contents, Constants.CONTENT_TYPE);
Expand Down
25 changes: 13 additions & 12 deletions src/test/java/org/apache/commons/fileupload2/SizesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.List;

Expand Down Expand Up @@ -58,13 +59,13 @@ public void testFileUpload()
final String header = "-----1234\r\n"
+ "Content-Disposition: form-data; name=\"field" + (num++) + "\"\r\n"
+ "\r\n";
baos.write(header.getBytes("US-ASCII"));
baos.write(header.getBytes(StandardCharsets.US_ASCII));
for (int j = 0; j < i; j++) {
baos.write((byte) j);
}
baos.write("\r\n".getBytes("US-ASCII"));
baos.write("\r\n".getBytes(StandardCharsets.US_ASCII));
}
baos.write("-----1234--\r\n".getBytes("US-ASCII"));
baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII));

final List<FileItem> fileItems =
Util.parseUpload(new ServletFileUpload(new DiskFileItemFactory()), baos.toByteArray());
Expand Down Expand Up @@ -103,23 +104,23 @@ public void testFileSizeLimit()
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setFileSizeMax(-1);
HttpServletRequest req = new MockHttpServletRequest(
request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
List<FileItem> fileItems = upload.parseRequest(req);
assertEquals(1, fileItems.size());
FileItem item = fileItems.get(0);
assertEquals("This is the content of the file\n", new String(item.get()));

upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setFileSizeMax(40);
req = new MockHttpServletRequest(request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
fileItems = upload.parseRequest(req);
assertEquals(1, fileItems.size());
item = fileItems.get(0);
assertEquals("This is the content of the file\n", new String(item.get()));

upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setFileSizeMax(30);
req = new MockHttpServletRequest(request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
try {
upload.parseRequest(req);
fail("Expected exception.");
Expand All @@ -146,15 +147,15 @@ public void testFileSizeLimitWithFakedContentLength()
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setFileSizeMax(-1);
HttpServletRequest req = new MockHttpServletRequest(
request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
List<FileItem> fileItems = upload.parseRequest(req);
assertEquals(1, fileItems.size());
FileItem item = fileItems.get(0);
assertEquals("This is the content of the file\n", new String(item.get()));

upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setFileSizeMax(40);
req = new MockHttpServletRequest(request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
fileItems = upload.parseRequest(req);
assertEquals(1, fileItems.size());
item = fileItems.get(0);
Expand All @@ -163,7 +164,7 @@ public void testFileSizeLimitWithFakedContentLength()
// provided Content-Length is larger than the FileSizeMax -> handled by ctor
upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setFileSizeMax(5);
req = new MockHttpServletRequest(request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
try {
upload.parseRequest(req);
fail("Expected exception.");
Expand All @@ -174,7 +175,7 @@ public void testFileSizeLimitWithFakedContentLength()
// provided Content-Length is wrong, actual content is larger -> handled by LimitedInputStream
upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setFileSizeMax(15);
req = new MockHttpServletRequest(request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
try {
upload.parseRequest(req);
fail("Expected exception.");
Expand Down Expand Up @@ -209,7 +210,7 @@ public void testMaxSizeLimit()
upload.setSizeMax(200);

final MockHttpServletRequest req = new MockHttpServletRequest(
request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
try {
upload.parseRequest(req);
fail("Expected exception.");
Expand Down Expand Up @@ -246,7 +247,7 @@ public void testMaxSizeLimitUnknownContentLength()
// otherwise the buffer would be immediately filled

final MockHttpServletRequest req = new MockHttpServletRequest(
request.getBytes("US-ASCII"), Constants.CONTENT_TYPE);
request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE);
req.setContentLength(-1);
req.setReadLimit(10);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -199,7 +200,7 @@ private String getFooter() {

private byte[] newShortRequest() throws IOException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final OutputStreamWriter osw = new OutputStreamWriter(baos, "US-ASCII");
final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII);
osw.write(getHeader("field"));
osw.write("123");
osw.write("\r\n");
Expand All @@ -210,7 +211,7 @@ private byte[] newShortRequest() throws IOException {

private byte[] newRequest() throws IOException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final OutputStreamWriter osw = new OutputStreamWriter(baos, "US-ASCII");
final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII);
int add = 16;
int num = 0;
for (int i = 0; i < 16384; i += add) {
Expand Down Expand Up @@ -255,7 +256,7 @@ public void testInvalidFileNameException() throws Exception {
"\r\n" +
"value2\r\n" +
"-----1234--\r\n";
final byte[] reqBytes = request.getBytes("US-ASCII");
final byte[] reqBytes = request.getBytes(StandardCharsets.US_ASCII);

final FileItemIterator fileItemIter = parseUpload(reqBytes.length, new ByteArrayInputStream(reqBytes));
final FileItemStream fileItemStream = fileItemIter.next();
Expand Down
3 changes: 2 additions & 1 deletion src/test/java/org/apache/commons/fileupload2/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.apache.commons.fileupload2;

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;

Expand Down Expand Up @@ -46,7 +47,7 @@ public static List<FileItem> parseUpload(final FileUpload upload, final byte[] b

public static List<FileItem> parseUpload(final FileUpload upload, final String content)
throws UnsupportedEncodingException, FileUploadException {
final byte[] bytes = content.getBytes("US-ASCII");
final byte[] bytes = content.getBytes(StandardCharsets.US_ASCII);
return parseUpload(upload, bytes, Constants.CONTENT_TYPE);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -63,7 +64,7 @@ public void parseParameterMap()
"\r\n" +
"value2\r\n" +
"-----1234--\r\n";
final byte[] bytes = text.getBytes("US-ASCII");
final byte[] bytes = text.getBytes(StandardCharsets.US_ASCII);
final HttpServletRequest request = new MockJakSrvltHttpRequest(bytes, Constants.CONTENT_TYPE);

final JakSrvltFileUpload upload = new JakSrvltFileUpload(new DiskFileItemFactory());
Expand All @@ -86,18 +87,18 @@ public void parseImpliedUtf8()
final String text = "-----1234\r\n" +
"Content-Disposition: form-data; name=\"utf8Html\"\r\n" +
"\r\n" +
"Thís ís the coñteñt of the fíle\n" +
"Th�s �s the co�te�t of the f�le\n" +
"\r\n" +
"-----1234--\r\n";

final byte[] bytes = text.getBytes("UTF-8");
final byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
final HttpServletRequest request = new MockJakSrvltHttpRequest(bytes, Constants.CONTENT_TYPE);

final DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setDefaultCharset("UTF-8");
final JakSrvltFileUpload upload = new JakSrvltFileUpload(fileItemFactory);
final List<FileItem> fileItems = upload.parseRequest(request);
final FileItem fileItem = fileItems.get(0);
assertTrue(fileItem.getString().contains("coñteñt"), fileItem.getString());
assertTrue(fileItem.getString().contains("co�te�t"), fileItem.getString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -68,7 +69,7 @@ public void parseParameterMap()
"\r\n" +
"value2\r\n" +
"-----1234--\r\n";
final byte[] bytes = text.getBytes("US-ASCII");
final byte[] bytes = text.getBytes(StandardCharsets.US_ASCII);
final ActionRequest request = new MockPortletActionRequest(bytes, Constants.CONTENT_TYPE);

final Map<String, List<FileItem>> mappedParameters = upload.parseParameterMap(request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -64,7 +65,7 @@ public void parseParameterMap()
"\r\n" +
"value2\r\n" +
"-----1234--\r\n";
final byte[] bytes = text.getBytes("US-ASCII");
final byte[] bytes = text.getBytes(StandardCharsets.US_ASCII);
final HttpServletRequest request = new MockHttpServletRequest(bytes, Constants.CONTENT_TYPE);

final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
Expand All @@ -87,18 +88,18 @@ public void parseImpliedUtf8()
final String text = "-----1234\r\n" +
"Content-Disposition: form-data; name=\"utf8Html\"\r\n" +
"\r\n" +
"Thís ís the coñteñt of the fíle\n" +
"Th�s �s the co�te�t of the f�le\n" +
"\r\n" +
"-----1234--\r\n";

final byte[] bytes = text.getBytes("UTF-8");
final byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
final HttpServletRequest request = new MockHttpServletRequest(bytes, Constants.CONTENT_TYPE);

final DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setDefaultCharset("UTF-8");
final ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
final List<FileItem> fileItems = upload.parseRequest(request);
final FileItem fileItem = fileItems.get(0);
assertTrue(fileItem.getString().contains("coñteñt"), fileItem.getString());
assertTrue(fileItem.getString().contains("co�te�t"), fileItem.getString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;

import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -134,15 +135,15 @@ public void badLength() throws Exception {
// The non-ASCII characters should just be ignored
@Test
public void nonASCIIcharacter() throws Exception {
assertEncoded("f","Zg=À="); // A-grave
assertEncoded("f","Zg=="); // A-grave
assertEncoded("f","Zg=\u0100=");
}

private static void assertEncoded(final String clearText, final String encoded) throws Exception {
final byte[] expected = clearText.getBytes(US_ASCII_CHARSET);
final byte[] expected = clearText.getBytes(StandardCharsets.US_ASCII);

final ByteArrayOutputStream out = new ByteArrayOutputStream(encoded.length());
final byte[] encodedData = encoded.getBytes(US_ASCII_CHARSET);
final byte[] encodedData = encoded.getBytes(StandardCharsets.US_ASCII);
Base64Decoder.decode(encodedData, out);
final byte[] actual = out.toByteArray();

Expand All @@ -151,7 +152,7 @@ private static void assertEncoded(final String clearText, final String encoded)

private static void assertIOException(final String messageText, final String encoded) throws UnsupportedEncodingException {
final ByteArrayOutputStream out = new ByteArrayOutputStream(encoded.length());
final byte[] encodedData = encoded.getBytes(US_ASCII_CHARSET);
final byte[] encodedData = encoded.getBytes(StandardCharsets.US_ASCII);
try {
Base64Decoder.decode(encodedData, out);
fail("Expected IOException");
Expand Down

0 comments on commit dc30745

Please sign in to comment.