From 46f67918a0e3804533aa41dd237822fcf55a119e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 29 Nov 2021 09:09:32 +0100 Subject: [PATCH] [jOOQ/jOOQ#12678] Potential resource leak in SettingsTools static initialiser --- .../java/org/jooq/conf/SettingsTools.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/conf/SettingsTools.java b/jOOQ/src/main/java/org/jooq/conf/SettingsTools.java index cf974201fd..970234f458 100644 --- a/jOOQ/src/main/java/org/jooq/conf/SettingsTools.java +++ b/jOOQ/src/main/java/org/jooq/conf/SettingsTools.java @@ -46,6 +46,7 @@ import static org.jooq.conf.StatementType.STATIC_STATEMENT; import static org.jooq.tools.StringUtils.defaultIfNull; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.sql.PreparedStatement; import java.sql.Statement; @@ -76,8 +77,14 @@ public final class SettingsTools { // Check classpath first InputStream in = SettingsTools.class.getResourceAsStream(property); - if (in != null) - settings = MiniJAXB.unmarshal(in, Settings.class); + if (in != null) { + try (InputStream i = in) { + settings = MiniJAXB.unmarshal(i, Settings.class); + } + catch (IOException e) { + log.error("Error while reading settings: " + e); + } + } else settings = MiniJAXB.unmarshal(new File(property), Settings.class); } @@ -86,8 +93,13 @@ public final class SettingsTools { InputStream in = SettingsTools.class.getResourceAsStream("/jooq-settings.xml"); if (in != null) { - log.warn("DEPRECATION", "Loading system wide default settings via the classpath /jooq-settings.xml resource has been deprecated. Please use explicit Settings in your Configuration references, instead."); - settings = MiniJAXB.unmarshal(in, Settings.class); + try (InputStream i = in) { + log.warn("DEPRECATION", "Loading system wide default settings via the classpath /jooq-settings.xml resource has been deprecated. Please use explicit Settings in your Configuration references, instead."); + settings = MiniJAXB.unmarshal(i, Settings.class); + } + catch (IOException e) { + log.error("Error while reading settings: " + e); + } } }