From 0234da5db59493c9c3e1fae3c71dadd6f4e882af Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Mon, 29 Sep 2025 09:42:53 -0400 Subject: [PATCH 1/3] GP-1 Correct NPE with symbol filter restore --- .../java/ghidra/app/plugin/core/symtable/NewSymbolFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/NewSymbolFilter.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/NewSymbolFilter.java index 2cda64dea8..955b1fe30b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/NewSymbolFilter.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/NewSymbolFilter.java @@ -270,7 +270,9 @@ public class NewSymbolFilter implements SymbolFilter { for (Element child : children) { String childName = child.getAttributeValue(Filter.NAME_ATTRIBUTE); Filter f = filterMap.get(childName); - f.restoreFromXml(child); + if (f != null) { // NOTE: filter definition may have been dropped and not found + f.restoreFromXml(child); + } } rebuildActiveFilters(); From 16401d62319f51a547cacef541c497be8ad4079d Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Mon, 29 Sep 2025 09:49:24 -0400 Subject: [PATCH 2/3] GP-0: WhatsNew corrections --- .../Public_Release/src/global/docs/WhatsNew.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md b/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md index 63d889a12f..2aa326c59f 100644 --- a/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md +++ b/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md @@ -100,7 +100,7 @@ can also be used in headless mode with the new `-mirror` command line option. ## PyGhidra PyGhidra 3.0.0 (compatible with Ghidra 12.0 and later) introduces many new Python-specific API methods with the goal of making the most common Ghidra tasks quick and easy, such as opening a -project, getting a program, and running a GhidraScript. Legacy API fuctions such as +project, getting a program, and running a GhidraScript. Legacy API functions such as `pyghidra.open_program()` and `pyghidra_run_script()` have been deprecated in favor of the new methods. Below is an example program that showcases some of the new API functionality. See the PyGhidra library README for more information. @@ -148,11 +148,11 @@ with pyghidra.open_project(os.environ["GHIDRA_PROJECT_DIR"], "ExampleProject", c ``` ## Z3 Concolic Emulation and Symbolic Summary -We've added an experimental Z3-based symbolic emulator, which runs as an "auxilliary" domain to the +We've added an experimental Z3-based symbolic emulator, which runs as an "auxiliary" domain to the concrete emulator, effectively constructing what is commonly called a "concolic" emulator. The symbolic emulator creates Z3 expressions and branching constraints, but it only follows the path determined by concrete emulation. This is most easily accessed by installing the "SymbolicSummaryZ3" -extension (**File** → **Install Extensions**) and then enabling the `Z3SummaryPlugin` in the +extension (**File** -> **Install Extensions**) and then enabling the `Z3SummaryPlugin` in the Debugger or Emulator tool, which includes a GUI for viewing and sorting through the results. The Z3 emulator requires z3-4.13.0, available from https://github.com/Z3Prover/z3. Other versions may work, but our current test configuration uses 4.13.0. Depending on the release and your platform, the From 90e9d803f8a599c18667efcb98993b7912c70e77 Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Mon, 29 Sep 2025 10:40:55 -0400 Subject: [PATCH 3/3] GP-0: New code block format in html produced from markdown --- .../java/ghidra/markdown/MarkdownToHtml.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/GhidraBuild/MarkdownSupport/src/main/java/ghidra/markdown/MarkdownToHtml.java b/GhidraBuild/MarkdownSupport/src/main/java/ghidra/markdown/MarkdownToHtml.java index 2d73ccf79e..d1821def11 100644 --- a/GhidraBuild/MarkdownSupport/src/main/java/ghidra/markdown/MarkdownToHtml.java +++ b/GhidraBuild/MarkdownSupport/src/main/java/ghidra/markdown/MarkdownToHtml.java @@ -127,9 +127,31 @@ public class MarkdownToHtml { @Override public void setAttributes(Node node, String tagName, Map attributes) { - if (node instanceof Code || node instanceof IndentedCodeBlock || - node instanceof FencedCodeBlock) { - attributes.put("style", "background-color: #eef;"); + // NOTE: This method will get called on both the
 and  tags, so be careful
+			// not to apply things twice
+
+			if (node instanceof FencedCodeBlock && tagName.equals("pre")) {
+				StringBuilder sb = new StringBuilder();
+				sb.append("background: #f4f4f4;");
+				sb.append("border: 1px solid #ddd;");
+				sb.append("border-left: 3px solid #f36d33;");
+				sb.append("color: #666;");
+				sb.append("display: block;");
+				sb.append("font-family: monospace;");
+				sb.append("line-height: 1.6;");
+				sb.append("margin-bottom: 1.6em;");
+				sb.append("max-width: 100%;");
+				sb.append("overflow: auto;");
+				sb.append("padding: 1em 1.5em;");
+				sb.append("page-break-inside: avoid;");
+				sb.append("word-wrap: break-word;");
+				attributes.put("style", sb.toString());
+			}
+			else if (node instanceof Code || node instanceof IndentedCodeBlock) {
+				StringBuilder sb = new StringBuilder();
+				sb.append("background: #f4f4f4;");
+				sb.append("font-family: monospace;");
+				attributes.put("style", sb.toString());
 			}
 		}
 	}