[ http://issues.apache.org/jira/browse/HARMONY-124?page=comments#action_12368195 ]
Richard Liang commented on HARMONY-124: --------------------------------------- Yes, Tim. The fix looks good. Please close this issue. Thanks a lot. > java.nio.charset.CharsetDecoder doesn't throw CoderMalfunctionError exception > when decodeLoop threw unexpected exception. > ------------------------------------------------------------------------------------------------------------------------- > > Key: HARMONY-124 > URL: http://issues.apache.org/jira/browse/HARMONY-124 > Project: Harmony > Type: Bug > Components: Classlib > Reporter: Richard Liang > Attachments: CharsetDecoder_patch.txt, Charset_patch.txt > > public final CoderResult decode(ByteBuffer in, CharBuffer out, boolean > endOfInput) > As spec says, the method throws CoderMalfunctionError if an invocation of the > decodeLoop method threw an unexpected exception. > However, Harmony doesn't throws CoderMalfunctionError when decodeLoop method > threw an unexpected exception. > The following test cases pass on RI , but fail on Harmony. > /* > * Test malfunction decode(ByteBuffer) > */ > public void testDecode_CoderMalfunctionError() throws Exception { > MockMalfunctionCharset cs = new MockMalfunctionCharset("mock", > null); > try{ > > cs.newDecoder().onMalformedInput(CodingErrorAction.REPLACE) > > .onUnmappableCharacter(CodingErrorAction.REPLACE).decode(ByteBuffer.wrap(new > byte[]{0x00,0x11})); > fail("should throw CoderMalfunctionError");//NON-NLS-1$ > }catch(CoderMalfunctionError e){ > //expected > } > } > /* > * Test malfunction decode(ByteBuffer) > */ > public void testDecode_NoCoderMalfunctionError() throws Exception { > MockMalfunctionCharset cs = new MockMalfunctionCharset("mock", > null); > try{ > cs.decode(ByteBuffer.wrap(new byte[]{0x00,0x11})); > }catch(CoderMalfunctionError e){ > fail("Charset.decode should return > silently");//NON-NLS-1 > } > } > /* > * Mock charset class with malfunction decode & encode. > */ > static final class MockMalfunctionCharset extends Charset { > public MockMalfunctionCharset(String canonicalName, String[] > aliases) { > super(canonicalName, aliases); > } > public boolean contains(Charset cs) { > return false; > } > public CharsetDecoder newDecoder() { > return new MockMalfunctionDecoder(this); > } > public CharsetEncoder newEncoder() { > return new MockMalfunctionEncoder(this); > } > } > /* > * Mock decoder. decodeLoop always throws unexpected exception. > */ > static class MockMalfunctionDecoder extends > java.nio.charset.CharsetDecoder { > public MockMalfunctionDecoder(Charset cs) { > super(cs, 1, 10); > } > protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) > { > throw new BufferOverflowException(); > } > } > /* > * Mock encoder. encodeLoop always throws unexpected exception. > */ > static class MockMalfunctionEncoder extends > java.nio.charset.CharsetEncoder { > public MockMalfunctionEncoder(Charset cs) { > super(cs, 1, 3, new byte[] { (byte) '?' }); > } > protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) > { > throw new BufferOverflowException(); > } > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira