From e0ebdcd5241e81453e7f490b451d242962ec290d Mon Sep 17 00:00:00 2001 From: heliang666s <3596006474@qq.com> Date: Tue, 16 Dec 2025 01:45:40 +0800 Subject: [PATCH 1/7] fix: resolve resource leaks using try-with-resources --- .../java/org/apache/dubbo/common/io/Bytes.java | 18 ++++-------------- .../org/apache/dubbo/common/utils/IOUtils.java | 12 ++++++------ .../dubbo/security/cert/DubboCertManager.java | 11 +++++------ .../rpc/protocol/tri/compressor/Bzip2.java | 16 +++++++--------- 4 files changed, 22 insertions(+), 35 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java index d3c615b75532..0617e6704a72 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java @@ -22,7 +22,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -786,12 +785,8 @@ public static byte[] base642bytes(final String str, final int off, final int len */ public static byte[] zip(byte[] bytes) throws IOException { UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); - OutputStream os = new DeflaterOutputStream(bos); - try { + try (DeflaterOutputStream os = new DeflaterOutputStream(bos)) { os.write(bytes); - } finally { - os.close(); - bos.close(); } return bos.toByteArray(); } @@ -804,16 +799,11 @@ public static byte[] zip(byte[] bytes) throws IOException { * @throws IOException */ public static byte[] unzip(byte[] bytes) throws IOException { - UnsafeByteArrayInputStream bis = new UnsafeByteArrayInputStream(bytes); - UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); - InputStream is = new InflaterInputStream(bis); - try { + try (UnsafeByteArrayInputStream bis = new UnsafeByteArrayInputStream(bytes); + UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); + InflaterInputStream is = new InflaterInputStream(bis)) { IOUtils.write(is, bos); return bos.toByteArray(); - } finally { - is.close(); - bis.close(); - bos.close(); } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/IOUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/IOUtils.java index c2ee5587b3bf..364aa1a8d494 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/IOUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/IOUtils.java @@ -191,13 +191,13 @@ public static String[] readLines(InputStream is) throws IOException { public static String read(InputStream is, String encoding) throws IOException { StringBuilder stringBuilder = new StringBuilder(); - InputStreamReader inputStreamReader = new InputStreamReader(is, encoding); - char[] buf = new char[1024]; - int len; - while ((len = inputStreamReader.read(buf)) != -1) { - stringBuilder.append(buf, 0, len); + try (InputStreamReader inputStreamReader = new InputStreamReader(is, encoding)) { + char[] buf = new char[1024]; + int len; + while ((len = inputStreamReader.read(buf)) != -1) { + stringBuilder.append(buf, 0, len); + } } - inputStreamReader.close(); return stringBuilder.toString(); } diff --git a/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java b/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java index bddef4a0942d..8bae66574aa9 100644 --- a/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java +++ b/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java @@ -367,12 +367,11 @@ private String generatePrivatePemKey(KeyPair keyPair) throws IOException { */ private String generatePemKey(String type, byte[] content) throws IOException { PemObject pemObject = new PemObject(type, content); - StringWriter str = new StringWriter(); - JcaPEMWriter jcaPEMWriter = new JcaPEMWriter(str); - jcaPEMWriter.writeObject(pemObject); - jcaPEMWriter.close(); - str.close(); - return str.toString(); + try (StringWriter str = new StringWriter(); + JcaPEMWriter jcaPEMWriter = new JcaPEMWriter(str)) { + jcaPEMWriter.writeObject(pemObject); + return str.toString(); + } } /** diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java index c76ea1459aa3..e77fccc120ca 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java @@ -58,11 +58,8 @@ public byte[] compress(byte[] payloadByteArr) throws RpcException { } ByteArrayOutputStream out = new ByteArrayOutputStream(); - BZip2CompressorOutputStream cos; - try { - cos = new BZip2CompressorOutputStream(out); + try (BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { cos.write(payloadByteArr); - cos.close(); } catch (Exception e) { throw new IllegalStateException(e); } @@ -85,11 +82,10 @@ public byte[] decompress(byte[] payloadByteArr) { return new byte[0]; } - ByteArrayOutputStream out = new ByteArrayOutputStream(); - ByteArrayInputStream in = new ByteArrayInputStream(payloadByteArr); - try { + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayInputStream in = new ByteArrayInputStream(payloadByteArr); + BZip2CompressorInputStream unZip = new BZip2CompressorInputStream(in)) { int totalBytesRead = 0; - BZip2CompressorInputStream unZip = new BZip2CompressorInputStream(in); byte[] buffer = new byte[2048]; int n; while ((n = unZip.read(buffer)) >= 0) { @@ -100,9 +96,11 @@ public byte[] decompress(byte[] payloadByteArr) { } out.write(buffer, 0, n); } + return out.toByteArray(); + } catch (RpcException e) { + throw e; } catch (Exception e) { throw new IllegalStateException(e); } - return out.toByteArray(); } } From 8f112306cf6e6e8bd3ebc00d9a4b3ffd0910f688 Mon Sep 17 00:00:00 2001 From: heliang666s <3596006474@qq.com> Date: Tue, 16 Dec 2025 11:07:04 +0800 Subject: [PATCH 2/7] fix: wrap ByteArrayOutputStream in try-with-resources Update Bzip2.compress() and Bytes.zip() to follow PMC requirements --- .../src/main/java/org/apache/dubbo/common/io/Bytes.java | 6 +++--- .../apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java index 0617e6704a72..431350c3e96b 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java @@ -784,11 +784,11 @@ public static byte[] base642bytes(final String str, final int off, final int len * @throws IOException */ public static byte[] zip(byte[] bytes) throws IOException { - UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); - try (DeflaterOutputStream os = new DeflaterOutputStream(bos)) { + try (UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); + DeflaterOutputStream os = new DeflaterOutputStream(bos)) { os.write(bytes); + return bos.toByteArray(); } - return bos.toByteArray(); } /** diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java index e77fccc120ca..2e9f8e03521e 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java @@ -57,14 +57,13 @@ public byte[] compress(byte[] payloadByteArr) throws RpcException { return new byte[0]; } - ByteArrayOutputStream out = new ByteArrayOutputStream(); - try (BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { cos.write(payloadByteArr); + return out.toByteArray(); } catch (Exception e) { throw new IllegalStateException(e); } - - return out.toByteArray(); } @Override From c198070cba1d08f9de257a5570c300d2425e5c53 Mon Sep 17 00:00:00 2001 From: heliang666s <3596006474@qq.com> Date: Tue, 16 Dec 2025 11:36:06 +0800 Subject: [PATCH 3/7] fix: resolve resource leaks using try-with-resources --- .../src/main/java/org/apache/dubbo/common/io/Bytes.java | 8 +++++--- .../apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java | 8 +++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java index 431350c3e96b..30e6bd83a527 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java @@ -784,11 +784,13 @@ public static byte[] base642bytes(final String str, final int off, final int len * @throws IOException */ public static byte[] zip(byte[] bytes) throws IOException { - try (UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); - DeflaterOutputStream os = new DeflaterOutputStream(bos)) { + UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); + try (DeflaterOutputStream os = new DeflaterOutputStream(bos)) { os.write(bytes); - return bos.toByteArray(); + }finally { + bos.close(); } + return bos.toByteArray(); } /** diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java index 2e9f8e03521e..32971f0bf336 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java @@ -57,13 +57,13 @@ public byte[] compress(byte[] payloadByteArr) throws RpcException { return new byte[0]; } - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try (BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { cos.write(payloadByteArr); - return out.toByteArray(); } catch (Exception e) { throw new IllegalStateException(e); } + return out.toByteArray(); } @Override @@ -96,8 +96,6 @@ public byte[] decompress(byte[] payloadByteArr) { out.write(buffer, 0, n); } return out.toByteArray(); - } catch (RpcException e) { - throw e; } catch (Exception e) { throw new IllegalStateException(e); } From f4d284c38b71e88f84d5ee0a59ce9fd0ae8a618e Mon Sep 17 00:00:00 2001 From: heliang666s <3596006474@qq.com> Date: Tue, 16 Dec 2025 11:39:49 +0800 Subject: [PATCH 4/7] fix: resolve resource leaks using try-with-resources --- .../src/main/java/org/apache/dubbo/common/io/Bytes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java index 30e6bd83a527..cd252be3e873 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/io/Bytes.java @@ -787,7 +787,7 @@ public static byte[] zip(byte[] bytes) throws IOException { UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream(); try (DeflaterOutputStream os = new DeflaterOutputStream(bos)) { os.write(bytes); - }finally { + } finally { bos.close(); } return bos.toByteArray(); From 936ea58bf9019d73c522339251d51d994b69a42b Mon Sep 17 00:00:00 2001 From: heliang666s <3596006474@qq.com> Date: Sun, 25 Jan 2026 19:15:39 +0800 Subject: [PATCH 5/7] fix: include bzip2 output stream in try-with-resources --- .../org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java index 32971f0bf336..809ade5a6d82 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java @@ -57,13 +57,13 @@ public byte[] compress(byte[] payloadByteArr) throws RpcException { return new byte[0]; } - ByteArrayOutputStream out = new ByteArrayOutputStream(); - try (BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { cos.write(payloadByteArr); + return out.toByteArray(); } catch (Exception e) { throw new IllegalStateException(e); } - return out.toByteArray(); } @Override From c06f633c9cfbeb7ea02b6720239986e1a6021937 Mon Sep 17 00:00:00 2001 From: heliang666s <3596006474@qq.com> Date: Tue, 27 Jan 2026 12:06:22 +0800 Subject: [PATCH 6/7] fix: close bzip2 stream before reading output --- .../apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java index 809ade5a6d82..44189f65a9aa 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/compressor/Bzip2.java @@ -57,9 +57,10 @@ public byte[] compress(byte[] payloadByteArr) throws RpcException { return new byte[0]; } - try (ByteArrayOutputStream out = new ByteArrayOutputStream(); - BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { - cos.write(payloadByteArr); + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + try (BZip2CompressorOutputStream cos = new BZip2CompressorOutputStream(out)) { + cos.write(payloadByteArr); + } return out.toByteArray(); } catch (Exception e) { throw new IllegalStateException(e); From 5a696379b1aa06ed313d058977d4407b818ad67e Mon Sep 17 00:00:00 2001 From: heliang666s <3596006474@qq.com> Date: Tue, 27 Jan 2026 14:54:08 +0800 Subject: [PATCH 7/7] fix: close PEM writer before reading output --- .../org/apache/dubbo/security/cert/DubboCertManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java b/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java index 8bae66574aa9..49b33e9b1e59 100644 --- a/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java +++ b/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/DubboCertManager.java @@ -367,11 +367,11 @@ private String generatePrivatePemKey(KeyPair keyPair) throws IOException { */ private String generatePemKey(String type, byte[] content) throws IOException { PemObject pemObject = new PemObject(type, content); - try (StringWriter str = new StringWriter(); - JcaPEMWriter jcaPEMWriter = new JcaPEMWriter(str)) { + StringWriter str = new StringWriter(); + try (JcaPEMWriter jcaPEMWriter = new JcaPEMWriter(str)) { jcaPEMWriter.writeObject(pemObject); - return str.toString(); } + return str.toString(); } /**