Browse Source

Use 'toString(Charset)' instead of 'toString(String)' for encodings (#27646)

Co-authored-by: 홍성민(SungMin Hong)/Platform Engineering팀/11ST <devmonster@11stcorp.com>
pull/27554/head
SungMin 4 years ago committed by GitHub
parent
commit
32af39d6e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      spring-context-indexer/src/main/java/org/springframework/context/index/processor/SortedProperties.java
  2. 2
      spring-core/src/main/java/org/springframework/core/SortedProperties.java
  3. 3
      spring-core/src/main/java/org/springframework/core/convert/support/PropertiesToStringConverter.java
  4. 11
      spring-core/src/main/java/org/springframework/util/StreamUtils.java
  5. 2
      spring-messaging/src/main/java/org/springframework/messaging/converter/ProtobufMessageConverter.java
  6. 7
      spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java
  7. 24
      spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageReader.java
  8. 18
      spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java
  9. 23
      spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java
  10. 4
      spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java
  11. 7
      spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java
  12. 4
      spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/RestTemplateXhrTransport.java

2
spring-context-indexer/src/main/java/org/springframework/context/index/processor/SortedProperties.java

@ -88,7 +88,7 @@ class SortedProperties extends Properties {
public void store(OutputStream out, String comments) throws IOException { public void store(OutputStream out, String comments) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
super.store(baos, (this.omitComments ? null : comments)); super.store(baos, (this.omitComments ? null : comments));
String contents = baos.toString(StandardCharsets.ISO_8859_1.name()); String contents = baos.toString(StandardCharsets.ISO_8859_1);
for (String line : contents.split(EOL)) { for (String line : contents.split(EOL)) {
if (!(this.omitComments && line.startsWith("#"))) { if (!(this.omitComments && line.startsWith("#"))) {
out.write((line + EOL).getBytes(StandardCharsets.ISO_8859_1)); out.write((line + EOL).getBytes(StandardCharsets.ISO_8859_1));

2
spring-core/src/main/java/org/springframework/core/SortedProperties.java

@ -90,7 +90,7 @@ class SortedProperties extends Properties {
public void store(OutputStream out, @Nullable String comments) throws IOException { public void store(OutputStream out, @Nullable String comments) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
super.store(baos, (this.omitComments ? null : comments)); super.store(baos, (this.omitComments ? null : comments));
String contents = baos.toString(StandardCharsets.ISO_8859_1.name()); String contents = baos.toString(StandardCharsets.ISO_8859_1);
for (String line : contents.split(EOL)) { for (String line : contents.split(EOL)) {
if (!(this.omitComments && line.startsWith("#"))) { if (!(this.omitComments && line.startsWith("#"))) {
out.write((line + EOL).getBytes(StandardCharsets.ISO_8859_1)); out.write((line + EOL).getBytes(StandardCharsets.ISO_8859_1));

3
spring-core/src/main/java/org/springframework/core/convert/support/PropertiesToStringConverter.java

@ -18,6 +18,7 @@ package org.springframework.core.convert.support;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Properties; import java.util.Properties;
import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.Converter;
@ -36,7 +37,7 @@ final class PropertiesToStringConverter implements Converter<Properties, String>
try { try {
ByteArrayOutputStream os = new ByteArrayOutputStream(256); ByteArrayOutputStream os = new ByteArrayOutputStream(256);
source.store(os, null); source.store(os, null);
return os.toString("ISO-8859-1"); return os.toString(StandardCharsets.ISO_8859_1);
} }
catch (IOException ex) { catch (IOException ex) {
// Should never happen. // Should never happen.

11
spring-core/src/main/java/org/springframework/util/StreamUtils.java

@ -25,7 +25,6 @@ import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer; import java.io.Writer;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@ -105,14 +104,8 @@ public abstract class StreamUtils {
public static String copyToString(ByteArrayOutputStream baos, Charset charset) { public static String copyToString(ByteArrayOutputStream baos, Charset charset) {
Assert.notNull(baos, "No ByteArrayOutputStream specified"); Assert.notNull(baos, "No ByteArrayOutputStream specified");
Assert.notNull(charset, "No Charset specified"); Assert.notNull(charset, "No Charset specified");
try {
// Can be replaced with toString(Charset) call in Java 10+ return baos.toString(charset);
return baos.toString(charset.name());
}
catch (UnsupportedEncodingException ex) {
// Should never happen
throw new IllegalArgumentException("Invalid charset name: " + charset, ex);
}
} }
/** /**

2
spring-messaging/src/main/java/org/springframework/messaging/converter/ProtobufMessageConverter.java

@ -183,7 +183,7 @@ public class ProtobufMessageConverter extends AbstractMessageConverter {
else if (this.protobufFormatSupport != null) { else if (this.protobufFormatSupport != null) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
this.protobufFormatSupport.print(message, outputStream, contentType, charset); this.protobufFormatSupport.print(message, outputStream, contentType, charset);
payload = outputStream.toString(charset.name()); payload = outputStream.toString(charset);
} }
} }
catch (IOException ex) { catch (IOException ex) {

7
spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java

@ -279,8 +279,11 @@ public class MockHttpServletResponse implements HttpServletResponse {
* @see #setContentType(String) * @see #setContentType(String)
*/ */
public String getContentAsString(Charset fallbackCharset) throws UnsupportedEncodingException { public String getContentAsString(Charset fallbackCharset) throws UnsupportedEncodingException {
String charsetName = (this.characterEncodingSet ? getCharacterEncoding() : fallbackCharset.name()); if (this.characterEncodingSet) {
return this.content.toString(charsetName); return this.content.toString(getCharacterEncoding());
}
return this.content.toString(fallbackCharset);
} }
@Override @Override

24
spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageReader.java

@ -16,7 +16,6 @@
package org.springframework.http.codec; package org.springframework.http.codec;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.nio.CharBuffer; import java.nio.CharBuffer;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@ -158,21 +157,16 @@ public class FormHttpMessageReader extends LoggingCodecSupport
private MultiValueMap<String, String> parseFormData(Charset charset, String body) { private MultiValueMap<String, String> parseFormData(Charset charset, String body) {
String[] pairs = StringUtils.tokenizeToStringArray(body, "&"); String[] pairs = StringUtils.tokenizeToStringArray(body, "&");
MultiValueMap<String, String> result = new LinkedMultiValueMap<>(pairs.length); MultiValueMap<String, String> result = new LinkedMultiValueMap<>(pairs.length);
try { for (String pair : pairs) {
for (String pair : pairs) { int idx = pair.indexOf('=');
int idx = pair.indexOf('='); if (idx == -1) {
if (idx == -1) { result.add(URLDecoder.decode(pair, charset), null);
result.add(URLDecoder.decode(pair, charset.name()), null); }
} else {
else { String name = URLDecoder.decode(pair.substring(0, idx), charset);
String name = URLDecoder.decode(pair.substring(0, idx), charset.name()); String value = URLDecoder.decode(pair.substring(idx + 1), charset);
String value = URLDecoder.decode(pair.substring(idx + 1), charset.name()); result.add(name, value);
result.add(name, value);
}
} }
}
catch (UnsupportedEncodingException ex) {
throw new IllegalStateException(ex);
} }
return result; return result;
} }

18
spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java

@ -16,7 +16,6 @@
package org.springframework.http.codec; package org.springframework.http.codec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@ -162,18 +161,13 @@ public class FormHttpMessageWriter extends LoggingCodecSupport
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
formData.forEach((name, values) -> formData.forEach((name, values) ->
values.forEach(value -> { values.forEach(value -> {
try { if (builder.length() != 0) {
if (builder.length() != 0) { builder.append('&');
builder.append('&');
}
builder.append(URLEncoder.encode(name, charset.name()));
if (value != null) {
builder.append('=');
builder.append(URLEncoder.encode(value, charset.name()));
}
} }
catch (UnsupportedEncodingException ex) { builder.append(URLEncoder.encode(name, charset));
throw new IllegalStateException(ex); if (value != null) {
builder.append('=');
builder.append(URLEncoder.encode(value, charset));
} }
})); }));
return builder.toString(); return builder.toString();

23
spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java

@ -348,11 +348,11 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue
for (String pair : pairs) { for (String pair : pairs) {
int idx = pair.indexOf('='); int idx = pair.indexOf('=');
if (idx == -1) { if (idx == -1) {
result.add(URLDecoder.decode(pair, charset.name()), null); result.add(URLDecoder.decode(pair, charset), null);
} }
else { else {
String name = URLDecoder.decode(pair.substring(0, idx), charset.name()); String name = URLDecoder.decode(pair.substring(0, idx), charset);
String value = URLDecoder.decode(pair.substring(idx + 1), charset.name()); String value = URLDecoder.decode(pair.substring(idx + 1), charset);
result.add(name, value); result.add(name, value);
} }
} }
@ -438,18 +438,13 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue
return; return;
} }
values.forEach(value -> { values.forEach(value -> {
try { if (builder.length() != 0) {
if (builder.length() != 0) { builder.append('&');
builder.append('&');
}
builder.append(URLEncoder.encode(name, charset.name()));
if (value != null) {
builder.append('=');
builder.append(URLEncoder.encode(String.valueOf(value), charset.name()));
}
} }
catch (UnsupportedEncodingException ex) { builder.append(URLEncoder.encode(name, charset));
throw new IllegalStateException(ex); if (value != null) {
builder.append('=');
builder.append(URLEncoder.encode(String.valueOf(value), charset));
} }
}); });
}); });

4
spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java

@ -249,10 +249,10 @@ public class ServletServerHttpRequest implements ServerHttpRequest {
List<String> values = Arrays.asList(entry.getValue()); List<String> values = Arrays.asList(entry.getValue());
for (Iterator<String> valueIterator = values.iterator(); valueIterator.hasNext();) { for (Iterator<String> valueIterator = values.iterator(); valueIterator.hasNext();) {
String value = valueIterator.next(); String value = valueIterator.next();
writer.write(URLEncoder.encode(name, FORM_CHARSET.name())); writer.write(URLEncoder.encode(name, FORM_CHARSET));
if (value != null) { if (value != null) {
writer.write('='); writer.write('=');
writer.write(URLEncoder.encode(value, FORM_CHARSET.name())); writer.write(URLEncoder.encode(value, FORM_CHARSET));
if (valueIterator.hasNext()) { if (valueIterator.hasNext()) {
writer.write('&'); writer.write('&');
} }

7
spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java

@ -279,8 +279,11 @@ public class MockHttpServletResponse implements HttpServletResponse {
* @see #setContentType(String) * @see #setContentType(String)
*/ */
public String getContentAsString(Charset fallbackCharset) throws UnsupportedEncodingException { public String getContentAsString(Charset fallbackCharset) throws UnsupportedEncodingException {
String charsetName = (this.characterEncodingSet ? getCharacterEncoding() : fallbackCharset.name()); if (this.characterEncodingSet) {
return this.content.toString(charsetName); return this.content.toString(getCharacterEncoding());
}
return this.content.toString(fallbackCharset);
} }
@Override @Override

4
spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/RestTemplateXhrTransport.java

@ -252,8 +252,8 @@ public class RestTemplateXhrTransport extends AbstractXhrTransport {
return null; return null;
} }
private void handleFrame(ByteArrayOutputStream os) throws IOException { private void handleFrame(ByteArrayOutputStream os) {
String content = os.toString(SockJsFrame.CHARSET.name()); String content = os.toString(SockJsFrame.CHARSET);
os.reset(); os.reset();
if (logger.isTraceEnabled()) { if (logger.isTraceEnabled()) {
logger.trace("XHR receive content: " + content); logger.trace("XHR receive content: " + content);

Loading…
Cancel
Save