From a459277c35c2b2c30dab406019f27143fbce93f1 Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Wed, 9 Sep 2026 12:21:35 -0400 Subject: [PATCH] GP-7265: Prevent GhidraScript compilation errors from being hidden --- .../app/plugin/core/osgi/GhidraSourceBundle.java | 11 ++++++----- .../ghidra/app/util/headless/HeadlessAnalyzer.java | 12 ++++++++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/GhidraSourceBundle.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/GhidraSourceBundle.java index 7b02ecf671..42e157e129 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/GhidraSourceBundle.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/GhidraSourceBundle.java @@ -838,11 +838,12 @@ public class GhidraSourceBundle extends GhidraBundle { for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { String error = diagnostic.toString() + "\n"; writer.write(error); - ResourceFileJavaFileObject sourceFileObject = - (ResourceFileJavaFileObject) diagnostic.getSource(); - ResourceFile sourceFile = sourceFileObject.getFile(); - buildError(sourceFile, error); // remember all errors for this file - filesWithErrors.add(sourceFileObject); + JavaFileObject obj = diagnostic.getSource(); + if (obj instanceof ResourceFileJavaFileObject sourceFileObject) { + ResourceFile sourceFile = sourceFileObject.getFile(); + buildError(sourceFile, error); // remember all errors for this file + filesWithErrors.add(sourceFileObject); + } } for (ResourceFileJavaFileObject sourceFileObject : filesWithErrors) { if (sourceFiles.remove(sourceFileObject)) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/headless/HeadlessAnalyzer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/headless/HeadlessAnalyzer.java index 7c8552d664..6b29a76f49 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/headless/HeadlessAnalyzer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/headless/HeadlessAnalyzer.java @@ -911,8 +911,16 @@ public class HeadlessAnalyzer { // GhidraScriptProvider case GhidraScriptProvider provider = GhidraScriptUtil.getProvider(currScriptFile); - PrintWriter errWriter = new PrintWriter(System.err); - currScript = provider.getScriptInstance(currScriptFile, errWriter); + StringWriter stringWriter = new StringWriter(); + PrintWriter errorWriter = new PrintWriter(stringWriter); + try { + currScript = provider.getScriptInstance(currScriptFile, errorWriter); + } + catch (GhidraScriptLoadException e) { + errorWriter.flush(); + Msg.error(this, stringWriter.toString()); + throw e; + } currScript.setScriptArgs(scriptArgs); if (options.propertiesFilePaths.size() > 0) {