This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-io.git
commit 8cc157e22e1eaef233ab44e9068abc4a5ef7007d Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Fri Jun 2 19:18:37 2023 -0400 ReaderInputStream.Builder.setCharset(null) should reset to a default object, not throw an NPE --- src/changes/changes.xml | 3 +++ .../org/apache/commons/io/build/AbstractStreamBuilder.java | 2 +- .../java/org/apache/commons/io/input/ReaderInputStream.java | 5 +++-- .../org/apache/commons/io/input/ReaderInputStreamTest.java | 10 ++++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 0e4f0029..ba1ddaea 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -73,6 +73,9 @@ The <action> type attribute can be add,update,fix,remove. <action dev="ggregory" type="fix" due-to="Gary Gregory"> ReaderInputStream.Builder.setCharsetEncoder(null) should reset to a default object, not throw an NPE. </action> + <action dev="ggregory" type="fix" due-to="Gary Gregory"> + ReaderInputStream.Builder.setCharset(null) should reset to a default object, not throw an NPE. + </action> <!-- ADD --> <action dev="ggregory" type="add" due-to="Gary Gregory"> Add CharSequenceInputStream.Builder. diff --git a/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java b/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java index f38bed07..8beccd93 100644 --- a/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java +++ b/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java @@ -99,7 +99,7 @@ public abstract class AbstractStreamBuilder<T, B extends AbstractStreamBuilder<T * * @return the Charset, defaults to {@link Charset#defaultCharset()}. */ - protected Charset getCharset() { + public Charset getCharset() { return charset; } diff --git a/src/main/java/org/apache/commons/io/input/ReaderInputStream.java b/src/main/java/org/apache/commons/io/input/ReaderInputStream.java index 01087800..69e0042a 100644 --- a/src/main/java/org/apache/commons/io/input/ReaderInputStream.java +++ b/src/main/java/org/apache/commons/io/input/ReaderInputStream.java @@ -129,8 +129,9 @@ public class ReaderInputStream extends InputStream { @Override public Builder setCharset(final Charset charset) { - charsetEncoder = charset.newEncoder(); - return super.setCharset(charset); + super.setCharset(charset); + charsetEncoder = getCharset().newEncoder(); + return this; } /** diff --git a/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java b/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java index 565fa1e7..db104daf 100644 --- a/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java +++ b/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java @@ -242,11 +242,21 @@ public class ReaderInputStreamTest { } } + @Test + public void testResetCharset() { + assertNotNull(ReaderInputStream.builder().setReader(new StringReader("\uD800")).setCharset((Charset) null).getCharset()); + } + @Test public void testResetCharsetEncoder() { assertNotNull(ReaderInputStream.builder().setReader(new StringReader("\uD800")).setCharsetEncoder(null).getCharsetEncoder()); } + @Test + public void testResetCharsetName() { + assertNotNull(ReaderInputStream.builder().setReader(new StringReader("\uD800")).setCharset((String) null).getCharset()); + } + @Test public void testUTF16WithSingleByteRead() throws IOException { testWithSingleByteRead(TEST_STRING, UTF_16);