From 249c69be84e81e01c41f03f939df184f368c78b7 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Thu, 20 Dec 2018 14:21:58 -0500 Subject: [PATCH 1/2] Fixed case deletion for 7ZipExtractor, NPE from Services, and NoClassDefFound for FileUtils --- .../autopsy/casemodule/services/Services.java | 5 ++++- .../SevenZipExtractor.java | 1 + .../autopsy/testutils/CaseUtils.java | 21 +++++++------------ 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java index c38bc12144..c3d64931af 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java @@ -54,6 +54,7 @@ public class Services implements Closeable { tagsManager = new TagsManager(caseDb); services.add(tagsManager); + //This may be null for feature tests! keywordSearchService = Lookup.getDefault().lookup(KeywordSearchService.class); services.add(keywordSearchService); @@ -105,7 +106,9 @@ public class Services implements Closeable { @Override public void close() throws IOException { for (Closeable service : services) { - service.close(); + if(service != null) { + service.close(); + } } } diff --git a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/SevenZipExtractor.java b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/SevenZipExtractor.java index 68db7a36d7..8b55988fa7 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/SevenZipExtractor.java +++ b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/SevenZipExtractor.java @@ -706,6 +706,7 @@ class SevenZipExtractor { parentAr.addChild(child); depthMap.put(unpackedFile.getId(), child); } + unpackedFile.close(); } } catch (TskCoreException | NoCurrentCaseException e) { diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java index 81523c107d..c34d2b6c5e 100755 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java @@ -29,6 +29,7 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.CaseActionException; import org.sleuthkit.autopsy.casemodule.CaseDetails; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.coreutils.FileUtil; /** * Class with utility methods for opening and closing cases for functional @@ -53,11 +54,8 @@ public final class CaseUtils { Path caseDirectoryPath = Paths.get(System.getProperty("java.io.tmpdir"), caseName); File caseDirectory = caseDirectoryPath.toFile(); if (caseDirectory.exists()) { - try { - FileUtils.deleteDirectory(caseDirectory); - } catch (IOException ex) { - Assert.fail(String.format("Failed to delete existing case %s at %s: %s", caseName, caseDirectoryPath, ex.getMessage())); - Exceptions.printStackTrace(ex); + if(!FileUtil.deleteDir(caseDirectory)){ + Assert.fail(String.format("Failed to delete existing case %s at %s", caseName, caseDirectoryPath)); } } @@ -97,14 +95,9 @@ public final class CaseUtils { try { Case.closeCurrentCase(); if (deleteCase) { - /* - * TODO (JIRA-4241): Restore the code to delete the case - * directory when the Image Gallery tool cleans up its drawable - * database connection deterministically, instead of in a - * finalizer. As it is now, case deletion can fail due to an - * open drawable database file handles. - */ - //FileUtils.deleteDirectory(caseDirectory); + if(!FileUtil.deleteDir(new File(caseDirectory))){ + Assert.fail(String.format("Failed to delete case directory for case %s at %s", caseName, caseDirectory)); + } } } catch (CaseActionException ex) { Exceptions.printStackTrace(ex); @@ -118,4 +111,4 @@ public final class CaseUtils { private CaseUtils() { } -} +} \ No newline at end of file From 4147986c8d5ace7cf3f789271f3a12ef89779070 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Fri, 21 Dec 2018 13:00:35 -0500 Subject: [PATCH 2/2] Fixed codacy things, created a story for the NPE and referenced it the comment --- .../autopsy/casemodule/services/Services.java | 4 +++- .../org/sleuthkit/autopsy/testutils/CaseUtils.java | 12 ++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java index c3d64931af..1e8d8fcb2e 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java @@ -54,7 +54,9 @@ public class Services implements Closeable { tagsManager = new TagsManager(caseDb); services.add(tagsManager); - //This may be null for feature tests! + //This lookup fails in the functional test code. See JIRA-4571 for details. + //For the time being, the closing of this service at line 108 will be made + //null safe so that the functional tests run with no issues. keywordSearchService = Lookup.getDefault().lookup(KeywordSearchService.class); services.add(keywordSearchService); diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java index c34d2b6c5e..a430a0a1be 100755 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/testutils/CaseUtils.java @@ -53,10 +53,8 @@ public final class CaseUtils { */ Path caseDirectoryPath = Paths.get(System.getProperty("java.io.tmpdir"), caseName); File caseDirectory = caseDirectoryPath.toFile(); - if (caseDirectory.exists()) { - if(!FileUtil.deleteDir(caseDirectory)){ - Assert.fail(String.format("Failed to delete existing case %s at %s", caseName, caseDirectoryPath)); - } + if(caseDirectory.exists() && !FileUtil.deleteDir(caseDirectory)){ + Assert.fail(String.format("Failed to delete existing case %s at %s", caseName, caseDirectoryPath)); } /* @@ -94,10 +92,8 @@ public final class CaseUtils { String caseDirectory = currentCase.getCaseDirectory(); try { Case.closeCurrentCase(); - if (deleteCase) { - if(!FileUtil.deleteDir(new File(caseDirectory))){ - Assert.fail(String.format("Failed to delete case directory for case %s at %s", caseName, caseDirectory)); - } + if(deleteCase && !FileUtil.deleteDir(new File(caseDirectory))){ + Assert.fail(String.format("Failed to delete case directory for case %s at %s", caseName, caseDirectory)); } } catch (CaseActionException ex) { Exceptions.printStackTrace(ex);