From 9e7f810b9cbe477cedf535475eb1b86877f6e76c Mon Sep 17 00:00:00 2001 From: metsw24-max Date: Sun, 31 May 2026 15:58:56 +0530 Subject: [PATCH] fix off-by-one out-of-bounds write in EmulatedCharset.getBytes --- .../gwt/emul/javaemul/internal/EmulatedCharset.java | 2 +- .../gwt/emultest/java/io/OutputStreamWriterTest.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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 612ee4c7cab..15aca6233ea 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 2c6c7a391c2..b849f5a4a78 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 {