{"record":{"id":"b036f08bf603ddb0","repo":"NationalSecurityAgency/ghidra","slug":"name-cannot-be-null","errorCode":null,"errorMessage":"name cannot be null","messagePattern":"name cannot be null","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/symbol/TraceEquateManager.java","lineNumber":33,"sourceCode":" */\npackage ghidra.trace.model.symbol;\n\nimport 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)","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/symbol/TraceEquateManager.java#L15-L51","documentation":"Thrown by TraceEquateManager.validateName: an equate name must be a non-null, non-empty, whitespace-free string. A null name is the first failure point and is rejected before emptiness or whitespace checks. Equates name scalar constants, so an absent name has no meaning.","triggerScenarios":"Calling TraceEquateManager.create(name, value), addEquateReference, or any operation that validates a name with name == null.","commonSituations":"Uninitialized name fields; a lookup/import that returns null when an equate is absent and that null is forwarded into a create call; UI text field left empty returning null.","solutions":["Supply a non-null name (typically the constant's textual form, e.g. \"0x10\" or \"MAX_INT\").","Null-check at the source: if (name == null) return/skip; do not forward null into create.","Default to a derived name when none is provided."],"exampleFix":"// before\nequateMgr.create(equateName /* null */, value);\n\n// after\nString name = equateName != null ? equateName : \"0x\" + Long.toHexString(value);\nequateMgr.create(name, value);","handlingStrategy":"validation","validationCode":"TraceEquateManager.validateName(name); // throws early, or:\nif (name == null) { name = \"0x\" + Long.toHexString(value); }\nequateMgr.create(name, value);","typeGuard":"static boolean validName(String name) { return name != null && !name.isEmpty() && !name.matches(\".*\\\\s.*\"); }","tryCatchPattern":null,"preventionTips":["Never forward a possibly-null name into create; derive a fallback.","Call validateName at the boundary where external names enter."],"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"}