diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index b1d2f28c3137d176830956aa7bd2a13b983760b3..57739bda76cf581a58549f51f6a1140d540a1b10 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -194,6 +194,8 @@ public class Case { private final SleuthkitEventListener sleuthkitEventListener; private CollaborationMonitor collaborationMonitor; private Services caseServices; + // matches something like '\\.\PHYSICALDRIVE0' + private static final String PLACEHOLDER_DS_PATH_REGEX = "^\\s*\\\\\\\\\\.\\\\(PHYSICALDRIVE)\\d*\\s*$"; private volatile boolean hasDataSource = false; private volatile boolean hasData = false; @@ -1305,6 +1307,13 @@ private static void updateGUIForCaseOpened(Case newCurrentCase) { String path = entry.getValue(); boolean fileExists = (new File(path).isFile() || DriveUtils.driveExists(path)); if (!fileExists) { + // CT-7336: ignore relocating datasources if file provider is present and placeholder path is used. + if (newCurrentCase.getMetadata() != null + && !StringUtils.isBlank(newCurrentCase.getMetadata().getContentProviderName()) + && (path == null || path.matches(PLACEHOLDER_DS_PATH_REGEX))) { + continue; + } + try { // Using invokeAndWait means that the dialog will // open on the EDT but this thread will wait for an