From 33abee2db2c9a5eefa686c3afa8b7d10e9e5fb15 Mon Sep 17 00:00:00 2001 From: Eric Weinberg Date: Mon, 5 Nov 2012 15:23:36 -0800 Subject: [PATCH] Ensure LineNumberReader is always closed Wrap ResourceDatabasePopulator.readScript() code in a try/finally block to ensure that the LineNumberReader is always closed. Issue: SPR-9912 --- .../init/ResourceDatabasePopulator.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java index 77e13252b1..65f52a35af 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java @@ -224,20 +224,24 @@ public class ResourceDatabasePopulator implements DatabasePopulator { */ private String readScript(EncodedResource resource) throws IOException { LineNumberReader lnr = new LineNumberReader(resource.getReader()); - String currentStatement = lnr.readLine(); - StringBuilder scriptBuilder = new StringBuilder(); - while (currentStatement != null) { - if (StringUtils.hasText(currentStatement) && - (this.commentPrefix != null && !currentStatement.startsWith(this.commentPrefix))) { - if (scriptBuilder.length() > 0) { - scriptBuilder.append('\n'); + try { + String currentStatement = lnr.readLine(); + StringBuilder scriptBuilder = new StringBuilder(); + while (currentStatement != null) { + if (StringUtils.hasText(currentStatement) + && (this.commentPrefix != null && !currentStatement.startsWith(this.commentPrefix))) { + if (scriptBuilder.length() > 0) { + scriptBuilder.append('\n'); + } + scriptBuilder.append(currentStatement); } - scriptBuilder.append(currentStatement); + currentStatement = lnr.readLine(); } - currentStatement = lnr.readLine(); + maybeAddSeparatorToScript(scriptBuilder); + return scriptBuilder.toString(); + } finally { + lnr.close(); } - maybeAddSeparatorToScript(scriptBuilder); - return scriptBuilder.toString(); } private void maybeAddSeparatorToScript(StringBuilder scriptBuilder) {