[ https://issues.apache.org/jira/browse/IO-277?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Niall Pemberton resolved IO-277. -------------------------------- Resolution: Fixed Fix Version/s: 2.1 Assignee: Niall Pemberton I have implemented your suggestion to replace unmappable characters so that behaviour is consistent with WriterOutputStream. Also I have added constructors to ReaderInputStream/WriterOutputStream that take CharsetEncoder/CharsetDecoder respectively so that if this is not the desired behaviour, then people can define their own. Thanks for reporting this and the test case. > ReaderInputStream enters infinite loop when it encounters an unmappable > character > --------------------------------------------------------------------------------- > > Key: IO-277 > URL: https://issues.apache.org/jira/browse/IO-277 > Project: Commons IO > Issue Type: Bug > Components: Streams/Writers > Affects Versions: 2.0.1 > Reporter: Mike Thomas > Assignee: Niall Pemberton > Fix For: 2.1 > > Attachments: TestReaderInputStreamLoop.java > > > The ReaderInputStream.read(byte[] b, int off, int len) method enters an > infinite loop when its CharsetEncoder encounters an unmappable character in > the input buffer. > When its CharsetEncoder encounters an unmappable character, the value of > CoderResult lastCoderResult.isUnmappable() == true, and Reader.read() is not > invoked on the underlying Reader ever again. > Attaching source file that reproduces this behavior. > One fix to consider is to call > CharsetEncoder.onUnmappableCharacter(CodingErrorAction) in the > ReaderInputStream constructor with a value other than the default > CodingErrorAction.REPORT. e.g.: > public ReaderInputStream(Reader reader, Charset charset, int bufferSize) { > this.reader = reader; > encoder = charset.newEncoder(); > encoder.onUnmappableCharacter(CodingErrorAction.REPLACE); > ... > By replacing the unmappable character with encoder's default replacement > character, this effectively prevents the infinite loop from occurring. I'm > not sure if that's the ideal behavior, but it seems fairly consistent with > what org.apache.commons.io.output.WriterOutputStream does. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira