From 25fda75bfacdf77b4cc3f66ad2f48cb09ec475ca Mon Sep 17 00:00:00 2001 From: "Jason P. Leasure" Date: Tue, 25 Aug 2020 10:56:33 -0400 Subject: [PATCH] fix issues resulting from search for script directory --- .../ghidra/app/script/GhidraScriptUtil.java | 21 +++++++++++++------ .../ghidra/app/script/JavaScriptProvider.java | 4 ++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/script/GhidraScriptUtil.java b/Ghidra/Features/Base/src/main/java/ghidra/app/script/GhidraScriptUtil.java index 7986946cbc..43f3270a41 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/script/GhidraScriptUtil.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/script/GhidraScriptUtil.java @@ -76,7 +76,7 @@ public class GhidraScriptUtil { bundleHost.startFramework(); } catch (OSGiException | IOException e) { - Msg.error(GhidraScript.class, "Failed to initialize BundleHost", e); + Msg.error(GhidraScriptUtil.class, "Failed to initialize BundleHost", e); } } @@ -128,12 +128,20 @@ public class GhidraScriptUtil { * @return the source directory if found, or null if not */ public static ResourceFile findSourceDirectoryContaining(ResourceFile sourceFile) { - String sourcePath = sourceFile.getAbsolutePath(); - for (ResourceFile sourceDir : getScriptSourceDirectories()) { - if (sourcePath.startsWith(sourceDir.getAbsolutePath() + File.separatorChar)) { - return sourceDir; + String sourcePath; + try { + sourcePath = sourceFile.getCanonicalPath(); + for (ResourceFile sourceDir : getScriptSourceDirectories()) { + if (sourcePath.startsWith(sourceDir.getCanonicalPath() + File.separatorChar)) { + return sourceDir; + } } } + catch (IOException e) { + Msg.error(GhidraScriptUtil.class, + "Failed to find script in any script directory: " + sourceFile.toString(), + e); + } return null; } @@ -219,7 +227,8 @@ public class GhidraScriptUtil { return false; } catch (IOException e) { - Msg.error(null, "Unexpected Exception: " + e.getMessage(), e); + Msg.error(GhidraScriptUtil.class, + "Failed to find file in system directories: " + file.toString(), e); return true; } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/script/JavaScriptProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/script/JavaScriptProvider.java index 9ea87aec86..d58578db7b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/script/JavaScriptProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/script/JavaScriptProvider.java @@ -113,6 +113,10 @@ public class JavaScriptProvider extends GhidraScriptProvider { */ public Class loadClass(ResourceFile sourceFile, PrintWriter writer) throws Exception { GhidraSourceBundle bundle = getBundleForSource(sourceFile); + if (bundle == null) { + throw new ClassNotFoundException( + "Failed to find source bundle containing script: " + sourceFile.toString()); + } bundleHost.activateAll(Collections.singletonList(bundle), TaskMonitor.DUMMY, writer); String classname = bundle.classNameForScript(sourceFile);