diff --git a/user/super/com/google/gwt/emul/javaemul/internal/EmulatedCharset.java b/user/super/com/google/gwt/emul/javaemul/internal/EmulatedCharset.java index 612ee4c7ca..15aca6233e 100644 --- a/user/super/com/google/gwt/emul/javaemul/internal/EmulatedCharset.java +++ b/user/super/com/google/gwt/emul/javaemul/internal/EmulatedCharset.java @@ -38,7 +38,7 @@ public byte[] getBytes(char[] buffer, int offset, int count) { int n = offset + count; byte[] bytes = new byte[count]; for (int i = offset; i < n; ++i) { - bytes[i] = (byte) (buffer[i] & 255); + bytes[i - offset] = (byte) (buffer[i] & 255); } return bytes; } diff --git a/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java b/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java index 2c6c7a391c..b849f5a4a7 100644 --- a/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java +++ b/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java @@ -88,6 +88,14 @@ public void testWriteASCIIChar() throws IOException { new String(ASCII_CHAR_ARRAY).getBytes(StandardCharsets.UTF_8), baos.toByteArray())); } + public void testWriteArrayWithOffset() throws IOException { + OutputStreamWriter latin1Writer = new OutputStreamWriter(baos, StandardCharsets.ISO_8859_1); + char[] chars = {'a', 'b', 'c', 'd'}; + latin1Writer.write(chars, 1, 2); + latin1Writer.close(); + assertTrue(Arrays.equals(new byte[] {'b', 'c'}, baos.toByteArray())); + } + public void testWriteArrayUsingNullArray() throws IOException { final char[] b = null; try {