This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-io.git
commit 496d9dae44d420889690e526e4d3968e5571c560 Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Sun Oct 3 09:41:50 2021 -0400 FileUtils.copyURLToFile(URL, File, int, int) leaks its URLConnection. Called by FileUtils.copyURLToFile(URL, File). --- src/changes/changes.xml | 4 ++++ src/main/java/org/apache/commons/io/FileUtils.java | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 5d1a79e..2788547 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -110,6 +110,10 @@ The <action> type attribute can be add,update,fix,remove. <action issue="IO-729" dev="ggregory" type="fix" due-to="Rob Spoor, Gary Gregory"> Prevent IllegalArgumentExceptions in BrokenInputStream/Reader/OutputStream/Writer #278. </action> + <action dev="ggregory" type="fix" due-to="Gary Gregory"> + FileUtils.copyURLToFile(URL, File, int, int) leaks its URLConnection. + Called by FileUtils.copyURLToFile(URL, File). + </action> <!-- ADD --> <action dev="ggregory" type="add" due-to="Gary Gregory"> Add BrokenReader.INSTANCE. diff --git a/src/main/java/org/apache/commons/io/FileUtils.java b/src/main/java/org/apache/commons/io/FileUtils.java index db7aa53..5cc4f05 100644 --- a/src/main/java/org/apache/commons/io/FileUtils.java +++ b/src/main/java/org/apache/commons/io/FileUtils.java @@ -1109,17 +1109,20 @@ public class FileUtils { * @throws IOException if an IO error occurs during copying * @since 2.0 */ - public static void copyURLToFile(final URL source, final File destination, - final int connectionTimeoutMillis, final int readTimeoutMillis) throws IOException { - final URLConnection connection = source.openConnection(); - connection.setConnectTimeout(connectionTimeoutMillis); - connection.setReadTimeout(readTimeoutMillis); - try (final InputStream stream = connection.getInputStream()) { - copyInputStreamToFile(stream, destination); + public static void copyURLToFile(final URL source, final File destination, final int connectionTimeoutMillis, final int readTimeoutMillis) + throws IOException { + final URLConnection urlConnection = source.openConnection(); + try { + urlConnection.setConnectTimeout(connectionTimeoutMillis); + urlConnection.setReadTimeout(readTimeoutMillis); + try (final InputStream stream = urlConnection.getInputStream()) { + copyInputStreamToFile(stream, destination); + } + } finally { + IOUtils.close(urlConnection); } } - /** * Creates all parent directories for a File object. *