From c27447a624c7ef82faac7c9a837c33fad24d3b64 Mon Sep 17 00:00:00 2001 From: Divyansh <2023csb1119@iitrpr.ac.in> Date: 2026年8月30日 12:59:53 +0530 Subject: [PATCH 1/2] Make `BaseEncoding.encodingStream().close()` idempotent. Fixes https://github.com/google/guava/issues/5284 RELNOTES=`io`: Fixed a bug in which calling `close()` more than once on a `BaseEncoding.encodingStream()` could write extra padding characters. Co-authored-by: Cursor --- .../test/com/google/common/io/BaseEncodingTest.java | 11 +++++++++++ guava/src/com/google/common/io/BaseEncoding.java | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/guava-tests/test/com/google/common/io/BaseEncodingTest.java b/guava-tests/test/com/google/common/io/BaseEncodingTest.java index 3780ede9361a..29e9f907944c 100644 --- a/guava-tests/test/com/google/common/io/BaseEncodingTest.java +++ b/guava-tests/test/com/google/common/io/BaseEncodingTest.java @@ -558,6 +558,17 @@ private static void testStreamingDecodes(BaseEncoding encoding, String encoded, } } + @GwtIncompatible // Writer + public void testEncodingStream_closeIsIdempotent() throws IOException { + StringWriter writer = new StringWriter(); + OutputStream encodingStream = base64().encodingStream(writer); + encodingStream.write(0); + encodingStream.close(); + assertThat(writer.toString()).isEqualTo("AA=="); + encodingStream.close(); + assertThat(writer.toString()).isEqualTo("AA=="); + } + public void testToString() { assertThat(base64().toString()).isEqualTo("BaseEncoding.base64().withPadChar('=')"); assertThat(base32Hex().omitPadding().toString()) diff --git a/guava/src/com/google/common/io/BaseEncoding.java b/guava/src/com/google/common/io/BaseEncoding.java index 44a2281ecf24..8b292d95bb01 100644 --- a/guava/src/com/google/common/io/BaseEncoding.java +++ b/guava/src/com/google/common/io/BaseEncoding.java @@ -646,6 +646,7 @@ public OutputStream encodingStream(Writer out) { int bitBuffer = 0; int bitBufferLength = 0; int writtenChars = 0; + boolean closed = false; @Override public void write(int b) throws IOException { @@ -667,6 +668,10 @@ public void flush() throws IOException { @Override public void close() throws IOException { + if (closed) { + return; + } + closed = true; if (bitBufferLength> 0) { int charIndex = (bitBuffer << (alphabet.bitsPerChar - bitBufferLength)) & alphabet.mask; out.write(alphabet.encode(charIndex)); @@ -677,6 +682,7 @@ public void close() throws IOException { writtenChars++; } } + bitBufferLength = 0; } out.close(); } From bab7f4583daddf4e4e60673327bc5f9bb1b0cf55 Mon Sep 17 00:00:00 2001 From: Divyansh <2023csb1119@iitrpr.ac.in> Date: 2026年8月30日 13:32:22 +0530 Subject: [PATCH 2/2] Trigger CLA re-check. Co-authored-by: Cursor

AltStyle によって変換されたページ (->オリジナル) /