Index: modules/nio_char/src/test/java/org/apache/harmony/tests/java/nio/charset/CharsetEncoderTest.java =================================================================== --- modules/nio_char/src/test/java/org/apache/harmony/tests/java/nio/charset/CharsetEncoderTest.java (revision 408888) +++ modules/nio_char/src/test/java/org/apache/harmony/tests/java/nio/charset/CharsetEncoderTest.java (working copy) @@ -51,10 +51,15 @@ // expected } } - + public void test_ConstructorLjava_nio_charset_CharsetNull() { + // Regression for HARMONY-491 + CharsetEncoder ech=new MockCharsetEncoderForHarmony491(null, 1, 1); + assertNull(ech.charset()); + } /** * Helper for contructor tests */ + public static class MockCharsetEncoderForHarmony141 extends CharsetEncoder { protected MockCharsetEncoderForHarmony141(Charset cs, @@ -72,7 +77,22 @@ return null; } } - + public static class MockCharsetEncoderForHarmony491 extends CharsetEncoder { + public MockCharsetEncoderForHarmony491(Charset arg0, float arg1, float arg2, byte[] arg3) { + super(arg0, arg1, arg2, arg3); + } + + public MockCharsetEncoderForHarmony491(Charset arg0, float arg1, float arg2) { + super(arg0, arg1, arg2); + } + protected CoderResult encodeLoop(CharBuffer arg0, ByteBuffer arg1) { + return null; + } + public boolean isLegalReplacement(byte[] arg0) { + return true; + } + } + /* * Test malfunction encode(CharBuffer) */ Index: modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java =================================================================== --- modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java (revision 408888) +++ modules/nio_char/src/main/java/java/nio/charset/CharsetEncoder.java (working copy) @@ -133,7 +133,7 @@ // decoder instance for this encoder's charset, used for replacement value // checking - private CharsetDecoder decoder; + private CharsetDecoder decoder = null; /* * --------------------------------------- Constructors @@ -202,7 +202,6 @@ status = INIT; malformAction = CodingErrorAction.REPORT; unmapAction = CodingErrorAction.REPORT; - decoder = cs.newDecoder(); replaceWith(replacement); } @@ -722,6 +721,10 @@ * replacement byte array. */ public boolean isLegalReplacement(byte[] repl) { + if (decoder == null){ + decoder = cs.newDecoder(); + }; + CodingErrorAction malform = decoder.malformedInputAction(); CodingErrorAction unmap = decoder.unmappableCharacterAction(); decoder.onMalformedInput(CodingErrorAction.REPORT);