{"record":{"id":"9fd220010ba4d6dd","repo":"NationalSecurityAgency/ghidra","slug":"name-cannot-contain-whitespace","errorCode":null,"errorMessage":"name cannot contain whitespace","messagePattern":"name cannot contain whitespace","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/symbol/TraceEquateManager.java","lineNumber":41,"sourceCode":"import 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);\n\n\tTraceEquate getByKey(long key);\n\n\tCollection<? extends TraceEquate> getByValue(long value);\n","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/symbol/TraceEquateManager.java#L23-L59","documentation":"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.","triggerScenarios":"Calling TraceEquateManager.create(name, value) with a name containing spaces, tabs, newlines, etc. (e.g. \"MY CONST\" or \"  0x10\").","commonSituations":"Copy-pasting constant names that include spaces; not trimming names; UI input with trailing whitespace; names derived from free-form strings.","solutions":["Strip whitespace: name = name.replaceAll(\"\\\\s+\", \"\"); (or reject and prompt the user).","Replace internal separators with underscores: name = name.trim().replaceAll(\"\\\\s+\", \"_\").","Validate up front and surface a clear error to the user before calling create."],"exampleFix":"// before\nequateMgr.create(\"MY CONST\", value); // contains space\n\n// after\nString name = \"MY CONST\".replaceAll(\"\\\\s+\", \"_\"); // \"MY_CONST\"\nequateMgr.create(name, value);","handlingStrategy":"validation","validationCode":"String n = name == null ? null : name.replaceAll(\"\\\\s+\", \"_\");\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":["Strip or replace whitespace in equate names before creating.","Use underscores as internal separators, never spaces."],"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"}