{"record":{"id":"d7b5ed87b528faeb","repo":"NationalSecurityAgency/ghidra","slug":"name-must-be-at-least-one-character-long-name","errorCode":null,"errorMessage":"Name must be at least one character long: ${name}","messagePattern":"Name must be at least one character long: (.+?)","errorType":"validation","errorClass":"InvalidNameException","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/data/DBTraceDataTypeManager.java","lineNumber":105,"sourceCode":"\t@Override\n\tpublic boolean allowsDefaultBuiltInSettings() {\n\t\treturn true;\n\t}\n\n\t@Override\n\tpublic void invalidateCache(boolean all) {\n\t\tsuper.invalidateCache();\n\t}\n\n\t@Override\n\tpublic String getName() {\n\t\treturn trace.getName();\n\t}\n\n\t@Override\n\tpublic void setName(String name) throws InvalidNameException {\n\t\tif (name == null || name.length() == 0) {\n\t\t\tthrow new InvalidNameException(\"Name must be at least one character long: \" + name);\n\t\t}\n\n\t\ttrace.setName(name);\n\t\tcategoryRenamed(CategoryPath.ROOT, getCategory(CategoryPath.ROOT));\n\t}\n\n\t@Override\n\tpublic InternalTracePlatform getPlatform() {\n\t\treturn platform;\n\t}\n\n\t@Override\n\tpublic void sourceArchiveChanged(UniversalID sourceArchiveID) {\n\t\tsuper.sourceArchiveChanged(sourceArchiveID);\n\t\ttrace.sourceArchiveChanged(sourceArchiveID);\n\t}\n\n\t@Override","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/data/DBTraceDataTypeManager.java#L87-L123","documentation":"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.","triggerScenarios":"Calling trace.getDataTypeManager().setName(\"\") or setName(null); wiring a UI text field that can submit an empty string.","commonSituations":"\"Save As\" / rename dialogs allowing blank input; programmatic rename using an uninitialized field; trimming whitespace yielding an empty string.","solutions":["Validate name != null && !name.trim().isEmpty() before calling setName.","Provide a default non-empty name when the input is blank.","Reject empty submissions at the UI/controller boundary."],"exampleFix":"// before\ndtm.setName(newName);\n\n// after\nif (newName == null || newName.trim().isEmpty()) {\n    throw new InvalidNameException(\"name required\");\n}\ndtm.setName(newName.trim());","handlingStrategy":"validation","validationCode":"if (name == null || name.trim().isEmpty()) {\n    throw new InvalidNameException(\"name required\");\n}\ndtm.setName(name.trim());","typeGuard":"static boolean isValidTraceName(String n) { return n != null && !n.trim().isEmpty(); }","tryCatchPattern":"try { dtm.setName(name); }\ncatch (InvalidNameException e) { /* prompt user for a non-empty name */ }","preventionTips":["Disable submit actions while the name field is blank.","Trim and validate names at the controller boundary.","Provide a sensible default name fallback."],"tags":["naming","validation"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}