From 35bd733289daaa5c4ca4b3049ff94a9c8e41540a Mon Sep 17 00:00:00 2001
From: apriestman <apriestman@basistech.com>
Date: Tue, 4 Aug 2020 12:32:36 -0400
Subject: [PATCH] Explicitly close prepared statements. Rename JniDbHelper
 class.

---
 .../src/org/sleuthkit/datamodel/SleuthkitCase.java     |  6 ++++++
 .../java/src/org/sleuthkit/datamodel/SleuthkitJNI.java | 10 +++++-----
 .../{JniDbHelper.java => TskCaseDbBridge.java}         |  6 +++---
 3 files changed, 14 insertions(+), 8 deletions(-)
 rename bindings/java/src/org/sleuthkit/datamodel/{JniDbHelper.java => TskCaseDbBridge.java} (99%)

diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
index 0f8fb7c88..42060e51a 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java
@@ -11699,6 +11699,12 @@ void executeUpdate(PreparedStatement statement) throws SQLException {
 		@Override
 		public void close() {
 			try {
+				for (PreparedStatement stmt:preparedStatements.values()) {
+					closeStatement(stmt);
+				}
+				for (PreparedStatement stmt:adHocPreparedStatements.values()) {
+					closeStatement(stmt);
+				}
 				connection.close();
 			} catch (SQLException ex) {
 				logger.log(Level.SEVERE, "Unable to close connection to case database", ex);
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index 608123381..fbdec24d6 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -439,7 +439,7 @@ void free() throws TskCoreException {
 		 *                          case database.
 		 */
 		long addImageInfo(long deviceObjId, List<String> imageFilePaths, String timeZone, SleuthkitCase skCase) throws TskCoreException {
-			JniDbHelper dbHelper = new JniDbHelper(skCase, new DefaultAddDataSourceCallbacks());
+			TskCaseDbBridge dbHelper = new TskCaseDbBridge(skCase, new DefaultAddDataSourceCallbacks());
 			try {
 				long tskAutoDbPointer = initializeAddImgNat(dbHelper, timezoneLongToShort(timeZone), false, false, false);
 				runOpenAndAddImgNat(tskAutoDbPointer, UUID.randomUUID().toString(), imageFilePaths.toArray(new String[0]), imageFilePaths.size(), timeZone);				
@@ -486,7 +486,7 @@ public class AddImageProcess {
 			private long imageId = 0;
 			private boolean isCanceled;
 			private final SleuthkitCase skCase;
-			private JniDbHelper dbHelper;
+			private TskCaseDbBridge dbHelper;
 
 			/**
 			 * Constructs an object that encapsulates a multi-step process to
@@ -552,7 +552,7 @@ public void run(String deviceId, String[] imageFilePaths, int sectorSize) throws
 			 */
 			public void run(String deviceId, Image image, int sectorSize, 
 					AddDataSourceCallbacks addDataSourceCallbacks) throws TskCoreException, TskDataException {			
-				dbHelper = new JniDbHelper(skCase, addDataSourceCallbacks);
+				dbHelper = new TskCaseDbBridge(skCase, addDataSourceCallbacks);
 				getTSKReadLock();
 				try {
 					long imageHandle = 0;
@@ -2096,9 +2096,9 @@ public static long openFile(long fsHandle, long fileId, TSK_FS_ATTR_TYPE_ENUM at
 
 	private static native HashHitInfo hashDbLookupVerbose(String hash, int dbHandle) throws TskCoreException;
 
-	private static native long initAddImgNat(JniDbHelper dbHelperObj, String timezone, boolean addUnallocSpace, boolean skipFatFsOrphans) throws TskCoreException;
+	private static native long initAddImgNat(TskCaseDbBridge dbHelperObj, String timezone, boolean addUnallocSpace, boolean skipFatFsOrphans) throws TskCoreException;
 
-	private static native long initializeAddImgNat(JniDbHelper dbHelperObj, String timezone, boolean addFileSystems, boolean addUnallocSpace, boolean skipFatFsOrphans) throws TskCoreException;
+	private static native long initializeAddImgNat(TskCaseDbBridge dbHelperObj, String timezone, boolean addFileSystems, boolean addUnallocSpace, boolean skipFatFsOrphans) throws TskCoreException;
 
 	private static native void runOpenAndAddImgNat(long process, String deviceId, String[] imgPath, int splits, String timezone) throws TskCoreException, TskDataException;
 
diff --git a/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java b/bindings/java/src/org/sleuthkit/datamodel/TskCaseDbBridge.java
similarity index 99%
rename from bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java
rename to bindings/java/src/org/sleuthkit/datamodel/TskCaseDbBridge.java
index 1b700b77d..6fcf0a38f 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/TskCaseDbBridge.java
@@ -43,9 +43,9 @@
  * Note that this code should only be used for the add image process, and not
  * to add additional files afterward.
  */
-class JniDbHelper {
+class TskCaseDbBridge {
     
-    private static final Logger logger = Logger.getLogger(JniDbHelper.class.getName());
+    private static final Logger logger = Logger.getLogger(TskCaseDbBridge.class.getName());
     
     private final SleuthkitCase caseDb;
     private CaseDbTransaction trans = null;
@@ -60,7 +60,7 @@ class JniDbHelper {
     private final Queue<LayoutRangeInfo> batchedLayoutRanges = new LinkedList<>();
     private final List<Long> layoutFileIds = new ArrayList<>();
     
-    JniDbHelper(SleuthkitCase caseDb, AddDataSourceCallbacks addDataSourceCallbacks) {
+    TskCaseDbBridge(SleuthkitCase caseDb, AddDataSourceCallbacks addDataSourceCallbacks) {
         this.caseDb = caseDb;
         this.addDataSourceCallbacks = addDataSourceCallbacks;
         trans = null;
-- 
GitLab