NationalSecurityAgency/ghidra · error · IllegalArgumentException

name cannot contain whitespace

Error message

name cannot contain whitespace

What it means

Thrown by TraceEquateManager.validateName: the name contains one or more whitespace characters (matched by \s+). Equate names must be single tokens with no internal/leading/trailing whitespace so they can be used as identifiers in disassembly annotations.

Source

Thrown at Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/symbol/TraceEquateManager.java:41

import ghidra.trace.model.stack.TraceStackFrame;
import ghidra.trace.model.thread.TraceThread;
import ghidra.util.exception.DuplicateNameException;

/**
 * TODO: Document me
 */
public interface TraceEquateManager extends TraceEquateOperations {
	static void validateName(String name) throws IllegalArgumentException {
		if (name == null) {
			throw new IllegalArgumentException("name cannot be null");
		}
		if (name.length() == 0) {
			throw new IllegalArgumentException("name cannot be empty string");
		}
		Pattern whitespace = Pattern.compile("\\s+");
		Matcher matcher = whitespace.matcher(name);
		if (matcher.find()) {
			throw new IllegalArgumentException("name cannot contain whitespace");
		}
	}

	TraceEquateSpace getEquateSpace(AddressSpace space, boolean createIfAbsent);

	TraceEquateSpace getEquateRegisterSpace(TraceThread thread, boolean createIfAbsent);

	TraceEquateSpace getEquateRegisterSpace(TraceStackFrame frame, boolean createIfAbsent);

	TraceEquate create(String name, long value)
			throws DuplicateNameException, IllegalArgumentException;

	TraceEquate getByName(String name);

	TraceEquate getByKey(long key);

	Collection<? extends TraceEquate> getByValue(long value);

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Strip whitespace: name = name.replaceAll("\\s+", ""); (or reject and prompt the user).
  2. Replace internal separators with underscores: name = name.trim().replaceAll("\\s+", "_").
  3. Validate up front and surface a clear error to the user before calling create.

Example fix

// before
equateMgr.create("MY CONST", value); // contains space

// after
String name = "MY CONST".replaceAll("\\s+", "_"); // "MY_CONST"
equateMgr.create(name, value);
Defensive patterns

Strategy: validation

Validate before calling

String n = name == null ? null : name.replaceAll("\\s+", "_");
if (n == null || n.isEmpty()) { n = "0x" + Long.toHexString(value); }
equateMgr.create(n, value);

Type guard

static boolean validName(String name) { return name != null && !name.isEmpty() && !name.matches(".*\\s.*"); }

Prevention

When it happens

Trigger: Calling TraceEquateManager.create(name, value) with a name containing spaces, tabs, newlines, etc. (e.g. "MY CONST" or " 0x10").

Common situations: Copy-pasting constant names that include spaces; not trimming names; UI input with trailing whitespace; names derived from free-form strings.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/9fd220010ba4d6dd. Report an issue: GitHub.