{"record":{"id":"b626f650693010c4","repo":"NationalSecurityAgency/ghidra","slug":"name-cannot-be-empty-string","errorCode":null,"errorMessage":"name cannot be empty string","messagePattern":"name cannot be empty string","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/symbol/TraceEquateManager.java","lineNumber":36,"sourceCode":"import java.util.Collection;\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\nimport ghidra.program.model.address.AddressSpace;\nimport ghidra.trace.model.stack.TraceStackFrame;\nimport ghidra.trace.model.thread.TraceThread;\nimport ghidra.util.exception.DuplicateNameException;\n\n/**\n * TODO: Document me\n */\npublic interface TraceEquateManager extends TraceEquateOperations {\n\tstatic void validateName(String name) throws IllegalArgumentException {\n\t\tif (name == null) {\n\t\t\tthrow new IllegalArgumentException(\"name cannot be null\");\n\t\t}\n\t\tif (name.length() == 0) {\n\t\t\tthrow new IllegalArgumentException(\"name cannot be empty string\");\n\t\t}\n\t\tPattern whitespace = Pattern.compile(\"\\\\s+\");\n\t\tMatcher matcher = whitespace.matcher(name);\n\t\tif (matcher.find()) {\n\t\t\tthrow new IllegalArgumentException(\"name cannot contain whitespace\");\n\t\t}\n\t}\n\n\tTraceEquateSpace getEquateSpace(AddressSpace space, boolean createIfAbsent);\n\n\tTraceEquateSpace getEquateRegisterSpace(TraceThread thread, boolean createIfAbsent);\n\n\tTraceEquateSpace getEquateRegisterSpace(TraceStackFrame frame, boolean createIfAbsent);\n\n\tTraceEquate create(String name, long value)\n\t\t\tthrows DuplicateNameException, IllegalArgumentException;\n\n\tTraceEquate getByName(String name);","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/symbol/TraceEquateManager.java#L18-L54","documentation":"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).","triggerScenarios":"Calling TraceEquateManager.create(name, value) (or any validating operation) with a name that is \"\".","commonSituations":"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.","solutions":["Provide a non-empty name (e.g. the constant's textual representation).","Treat empty as absent: skip creation when name.trim().isEmpty().","Derive a fallback name from the value."],"exampleFix":"// before\nequateMgr.create(name.trim(), value); // name.trim() == \"\"\n\n// after\nString n = name.trim();\nif (n.isEmpty()) n = \"0x\" + Long.toHexString(value);\nequateMgr.create(n, value);","handlingStrategy":"validation","validationCode":"String n = name == null ? null : name.trim();\nif (n == null || n.isEmpty()) { n = \"0x\" + Long.toHexString(value); }\nequateMgr.create(n, value);","typeGuard":"static boolean validName(String name) { return name != null && !name.isEmpty() && !name.matches(\".*\\\\s.*\"); }","tryCatchPattern":null,"preventionTips":["Trim and reject empty names before creating an equate.","Derive a constant name from the value when none is supplied."],"tags":["ghidra","trace-modeling","equate","name-validation","illegal-argument"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}