NationalSecurityAgency/ghidra · error · InvalidNameException

Name must be at least one character long: ${name}

Error message

Name must be at least one character long: ${name}

What it means

DBTraceDataTypeManager.setName rejects null or zero-length names with InvalidNameException("Name must be at least one character long"). The trace name must be non-empty because it propagates to trace.setName and triggers a category-renamed event on the root category.

Source

Thrown at Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/data/DBTraceDataTypeManager.java:105

	@Override
	public boolean allowsDefaultBuiltInSettings() {
		return true;
	}

	@Override
	public void invalidateCache(boolean all) {
		super.invalidateCache();
	}

	@Override
	public String getName() {
		return trace.getName();
	}

	@Override
	public void setName(String name) throws InvalidNameException {
		if (name == null || name.length() == 0) {
			throw new InvalidNameException("Name must be at least one character long: " + name);
		}

		trace.setName(name);
		categoryRenamed(CategoryPath.ROOT, getCategory(CategoryPath.ROOT));
	}

	@Override
	public InternalTracePlatform getPlatform() {
		return platform;
	}

	@Override
	public void sourceArchiveChanged(UniversalID sourceArchiveID) {
		super.sourceArchiveChanged(sourceArchiveID);
		trace.sourceArchiveChanged(sourceArchiveID);
	}

	@Override

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Validate name != null && !name.trim().isEmpty() before calling setName.
  2. Provide a default non-empty name when the input is blank.
  3. Reject empty submissions at the UI/controller boundary.

Example fix

// before
dtm.setName(newName);

// after
if (newName == null || newName.trim().isEmpty()) {
    throw new InvalidNameException("name required");
}
dtm.setName(newName.trim());
Defensive patterns

Strategy: validation

Validate before calling

if (name == null || name.trim().isEmpty()) {
    throw new InvalidNameException("name required");
}
dtm.setName(name.trim());

Type guard

static boolean isValidTraceName(String n) { return n != null && !n.trim().isEmpty(); }

Try / catch

try { dtm.setName(name); }
catch (InvalidNameException e) { /* prompt user for a non-empty name */ }

Prevention

When it happens

Trigger: Calling trace.getDataTypeManager().setName("") or setName(null); wiring a UI text field that can submit an empty string.

Common situations: "Save As" / rename dialogs allowing blank input; programmatic rename using an uninitialized field; trimming whitespace yielding an empty string.

Related errors


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