From 732f4623aea2655799e49f5cbd108ce7eead385f Mon Sep 17 00:00:00 2001 From: Louis Bergelson Date: Thu, 9 Feb 2023 11:32:33 -0500 Subject: [PATCH] Fix file leak in ClassFinder (#193) * Adds a try-with-resources block to close a zipfile in the class finder * And the impossible to resist first java 17 related minor refactoring. --- .../barclay/argparser/ClassFinder.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/broadinstitute/barclay/argparser/ClassFinder.java b/src/main/java/org/broadinstitute/barclay/argparser/ClassFinder.java index ef386265..024d9cff 100644 --- a/src/main/java/org/broadinstitute/barclay/argparser/ClassFinder.java +++ b/src/main/java/org/broadinstitute/barclay/argparser/ClassFinder.java @@ -9,6 +9,7 @@ import java.net.URL; import java.net.URLClassLoader; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -73,7 +74,7 @@ public void find(String packageName, final Class parentType) { while (urls.hasMoreElements()) { try { String urlPath = urls.nextElement().getFile(); - urlPath = URLDecoder.decode(urlPath, "UTF-8"); + urlPath = URLDecoder.decode(urlPath, StandardCharsets.UTF_8); if ( urlPath.startsWith("file:") ) { urlPath = urlPath.substring(5); } @@ -105,13 +106,14 @@ public void find(String packageName, final Class parentType) { * @param packagePath the top level package to start from */ protected void scanJar(final File file, final String packagePath) throws IOException { - final ZipFile zip = new ZipFile(file); - final Enumeration entries = zip.entries(); - while ( entries.hasMoreElements() ) { - final ZipEntry entry = entries.nextElement(); - final String name = entry.getName(); - if (name.startsWith(packagePath)) { - handleItem(name); + try(final ZipFile zip = new ZipFile(file)) { + final Enumeration entries = zip.entries(); + while (entries.hasMoreElements()) { + final ZipEntry entry = entries.nextElement(); + final String name = entry.getName(); + if (name.startsWith(packagePath)) { + handleItem(name); + } } } }