From 0d3d65de235ea1da04eaf7b964d855d589f140a9 Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Mon, 5 Jun 2023 06:55:50 -0400 Subject: [PATCH] GP-3445: Fixed an IllegalStateException that could occur if both "Load Local Libraries From Disk" and "Load System Libraries From Disk" options are used during import, and the same library is found in both local and system directories --- .../ghidra/app/util/opinion/AbstractLibrarySupportLoader.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java index be57daae40..7ede49de11 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java @@ -507,6 +507,7 @@ public abstract class AbstractLibrarySupportLoader extends AbstractProgramLoader // options turned off (if shouldSearchAllPaths() is overridden to return true). // In this case, we still want to process those libraries, but we // do not want to save them, so they can be released. + boolean loadedLocal = false; if (!localSearchPaths.isEmpty()) { Loaded loadedLibrary = loadLibraryFromSearchPaths( libraryName, provider, localSearchPaths, libraryDestFolderPath, @@ -514,13 +515,14 @@ public abstract class AbstractLibrarySupportLoader extends AbstractProgramLoader if (loadedLibrary != null) { if (loadLocalLibraries) { loadedPrograms.add(loadedLibrary); + loadedLocal = true; } else { loadedLibrary.release(consumer); } } } - if (!systemSearchPaths.isEmpty()) { + if (!loadedLocal && !systemSearchPaths.isEmpty()) { Loaded loadedLibrary = loadLibraryFromSearchPaths( libraryName, provider, systemSearchPaths, libraryDestFolderPath, unprocessed, depth, desiredLoadSpec, options, log, consumer, monitor);