Skip to content

Commit 3ad3bdb

Browse files
authored
[IO-781] Fix CharSequenceInputStream coding exception handling (#537)
1 parent 703b283 commit 3ad3bdb

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

src/main/java/org/apache/commons/io/input/CharSequenceInputStream.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ private CharSequenceInputStream(final CharSequence cs, final int bufferSize, fin
186186
// Reset everything without filling the buffer
187187
// so the same exception can be thrown again later.
188188
this.bBuf.clear();
189+
this.bBuf.flip();
189190
this.cBuf.rewind();
190191
}
191192
}

src/test/java/org/apache/commons/io/input/CharSequenceInputStreamTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.junit.jupiter.api.Assertions.assertEquals;
2121
import static org.junit.jupiter.api.Assertions.assertNotEquals;
2222
import static org.junit.jupiter.api.Assertions.assertNotNull;
23+
import static org.junit.jupiter.api.Assertions.assertThrows;
2324
import static org.junit.jupiter.api.Assertions.assertTrue;
2425
import static org.junit.jupiter.api.Assertions.fail;
2526

@@ -31,7 +32,9 @@
3132
import java.nio.charset.Charset;
3233
import java.nio.charset.CharsetEncoder;
3334
import java.nio.charset.CoderResult;
35+
import java.nio.charset.CodingErrorAction;
3436
import java.nio.charset.StandardCharsets;
37+
import java.nio.charset.UnmappableCharacterException;
3538
import java.util.Random;
3639

3740
import org.apache.commons.io.CharsetsTest;
@@ -524,4 +527,15 @@ public void testSkip_RequiredCharsets(final String csName) throws Exception {
524527
assertEquals(-1, r.read(), csName);
525528
}
526529
}
530+
531+
@Test
532+
public void testCharacterCodingException() throws IOException {
533+
final Charset charset = StandardCharsets.US_ASCII;
534+
final CharSequenceInputStream in = CharSequenceInputStream.builder()
535+
.setCharsetEncoder(charset.newEncoder().onUnmappableCharacter(CodingErrorAction.REPORT))
536+
.setCharSequence("\u0080")
537+
.get();
538+
assertEquals(0, in.available());
539+
assertThrows(UnmappableCharacterException.class, in::read);
540+
}
527541
}

0 commit comments

Comments
 (0)