{"record":{"id":"3b6347f736eef6b9","repo":"NationalSecurityAgency/ghidra","slug":"one-or-more-invalid-register-names","errorCode":null,"errorMessage":"One or more invalid register names: {}","messagePattern":"One or more invalid register names: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/flatapi/FlatDebuggerAPI.java","lineNumber":1061,"sourceCode":"\t * @param language the language defining the registers\n\t * @param names the names\n\t * @return the registers, in the same order\n\t * @throws IllegalArgumentException if any name is invalid\n\t */\n\tdefault List<Register> validateRegisterNames(Language language, Collection<String> names) {\n\t\tList<String> invalid = new ArrayList<>();\n\t\tList<Register> result = new ArrayList<>();\n\t\tfor (String n : names) {\n\t\t\tRegister register = language.getRegister(n);\n\t\t\tif (register != null) {\n\t\t\t\tresult.add(register);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tinvalid.add(n);\n\t\t\t}\n\t\t}\n\t\tif (!invalid.isEmpty()) {\n\t\t\tthrow new IllegalArgumentException(\"One or more invalid register names: \" + invalid);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Validate and retrieve the name register\n\t * \n\t * @param language the language defining the register\n\t * @param name the name\n\t * @return the register\n\t * @throws IllegalArgumentException if the name is invalid\n\t */\n\tdefault Register validateRegisterName(Language language, String name) {\n\t\tRegister register = language.getRegister(name);\n\t\tif (register == null) {\n\t\t\tthrow new IllegalArgumentException(\"Invalid register name: \" + name);\n\t\t}\n\t\treturn register;","sourceCodeStart":1043,"sourceCodeEnd":1079,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/flatapi/FlatDebuggerAPI.java#L1043-L1079","documentation":"Thrown by the bulk register-name validation method when one or more of the supplied register names are not defined in the given language. It collects all invalid names and reports them together.","triggerScenarios":"Calling the registers-validation method with a collection of names where at least one does not map to a Register in the platform's language.","commonSituations":"Using register names from a different architecture (e.g., x86 names on ARM); typos in register names; version differences where a register was renamed or removed; passing generic names not present in the specific language definition.","solutions":["Query language.getRegisters() to enumerate valid register names before calling.","Filter input names against the language's register set, removing or correcting unknown ones.","Confirm the platform/language matches the architecture whose register names you are using."],"exampleFix":"// before\nList<Register> regs = validateRegisters(lang, Arrays.asList(\"RAX\",\"FOOBAR\")); // throws\n\n// after\nSet<String> valid = lang.getRegisters().stream()\n    .map(Register::getName).collect(Collectors.toSet());\nList<String> names = requested.stream().filter(valid::contains).toList();\nList<Register> regs = validateRegisters(lang, names);","handlingStrategy":"validation","validationCode":"Set<String> valid = language.getRegisters().stream()\n    .map(Register::getName)\n    .collect(Collectors.toSet());\nList<String> bad = names.stream().filter(n -> !valid.contains(n)).toList();\nif (!bad.isEmpty()) {\n    throw new IllegalStateException(\"Invalid registers: \" + bad);\n}","typeGuard":"static boolean allValidRegisters(Language lang, Collection<String> names) {\n    return names.stream().allMatch(n -> lang.getRegister(n) != null);\n}","tryCatchPattern":"try {\n    List<Register> regs = validateRegisters(lang, names);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"One or more invalid register names\")) {\n        // filter names against lang.getRegisters() and retry\n    } else throw e;\n}","preventionTips":["Enumerate valid register names from the active language before validation.","Ensure register names match the platform's architecture."],"tags":["flat-debugger-api","register","language","argument-validation","debugger"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}