{"record":{"id":"d396c843bf57b261","repo":"NationalSecurityAgency/ghidra","slug":"missing-directory-containing-update-files","errorCode":null,"errorMessage":"Missing directory containing update files","messagePattern":"Missing directory containing update files","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java","lineNumber":695,"sourceCode":"\t\t\tthrow new IllegalArgumentException(\"Missing directory containing signature files\");\n\t\t}\n\n\t\tString xmlDirectory = params.get(0);\n\n\t\tFile dir = checkDirectory(xmlDirectory);\n\n\t\tboolean hasOverride = optionValueMap.containsKey(OVERRIDE_OPTION);\n\t\tString md5Filter = optionValueMap.get(MD5_OPTION);\n\n\t\ttry (BulkSignatures bsim = getBulkSignatures()) {\n\t\t\tbsim.sendXmlToQueryServer(dir, hasOverride ? ghidraURL : null, md5Filter, monitor);\n\t\t}\n\t}\n\n\tprivate void doCommitUpdates(List<String> params)\n\t\t\tthrows IOException, SAXException, LSHException {\n\t\tif (params.size() < 1) {\n\t\t\tthrow new IllegalArgumentException(\"Missing directory containing update files\");\n\t\t}\n\t\tString xmlDirectory = params.get(0);\n\n\t\tFile dir = checkDirectory(xmlDirectory);\n\n\t\ttry (BulkSignatures bsim = getBulkSignatures()) {\n\t\t\tbsim.sendUpdateToServer(dir);\n\t\t}\n\t}\n\n\tprivate boolean isAllNull(String... strings) {\n\t\tfor (String s : strings) {\n\t\t\tif (s != null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}","sourceCodeStart":677,"sourceCodeEnd":713,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java#L677-L713","documentation":"Thrown by doCommitUpdates() when no positional directory argument is supplied. commitupdates requires a directory containing update XML files (produced by generateupdates). The commit step sends those updates to the BSim server, so a source directory is mandatory.","triggerScenarios":"Running 'bsim commitupdates <bsimURL>' with no positional argument. params.size() < 1 at line 694.","commonSituations":"Forgetting the directory; confusing commitsigs and commitupdates argument shapes; omitting a shell variable that expanded to empty.","solutions":["Supply the update directory: commitupdates <bsimURL> </xmldirectory>.","Check usage at line 1040: commitupdates <bsimURL> </xmldirectory>."],"exampleFix":"// before\nbsim commitupdates postgresql://myhost/BsimDB\n// after\nbsim commitupdates postgresql://myhost/BsimDB /tmp/updates","handlingStrategy":"validation","validationCode":"// commitupdates requires a positional directory\nif (\"commitupdates\".equals(command) && positionalParams.isEmpty()) {\n    throw new IllegalArgumentException(\"commitupdates requires the update XML directory argument\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Confirm the update directory was produced by generateupdates before committing.","Guard against empty shell variables in scripted pipelines."],"tags":["cli","argument-validation","bsim","commitupdates"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}