NationalSecurityAgency/ghidra · error · IllegalArgumentException

name cannot be empty string

Error message

name cannot be empty string

What it means

Thrown by TraceEquateManager.validateName: the name is non-null but zero-length. Equates require a non-empty identifier, so an empty string is rejected (after the null check, before the whitespace check).

Source

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

import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import ghidra.program.model.address.AddressSpace;
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);

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Provide a non-empty name (e.g. the constant's textual representation).
  2. Treat empty as absent: skip creation when name.trim().isEmpty().
  3. Derive a fallback name from the value.

Example fix

// before
equateMgr.create(name.trim(), value); // name.trim() == ""

// after
String n = name.trim();
if (n.isEmpty()) n = "0x" + Long.toHexString(value);
equateMgr.create(n, value);
Defensive patterns

Strategy: validation

Validate before calling

String n = name == null ? null : name.trim();
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) (or any validating operation) with a name that is "".

Common situations: A UI/import that yields an empty string for an unnamed equate; trimming a whitespace-only name to empty; defaulting to "" instead of a real constant name.

Related errors


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