{"record":{"id":"08e120a4fc9e3ec9","repo":"NationalSecurityAgency/ghidra","slug":"no-update-files-found-in","errorCode":null,"errorMessage":"No update files found in {}","messagePattern":"No update files found in (.+?)","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java","lineNumber":226,"sourceCode":"\t\t\tif (insertreq.execute(querydb) == null) {\n\t\t\t\tBSimError lastError = querydb.getLastError();\n\t\t\t\tif ((lastError.category == ErrorCategory.Format) ||\n\t\t\t\t\t(lastError.category == ErrorCategory.Nonfatal)) {\n\t\t\t\t\tMsg.warn(this, file.getName() + \": \" + lastError.message);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new IOException(file.getName() + \": \" + lastError.message);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected void sendUpdateToServer(File dir) throws IOException, SAXException, LSHException {\n\t\testablishQueryServerConnection(true);\n\t\tList<File> files = gatherXml(\"update_\", dir);\n\n\t\tif (files.isEmpty()) {\n\t\t\tthrow new IOException(\"No update files found in \" + dir.getAbsolutePath());\n\t\t}\n\n\t\tfor (File file : files) {\n\t\t\tMsg.info(this, \"Updating metadata for \" + file.getName());\n\t\t\tQueryUpdate update = new QueryUpdate();\n\t\t\tloadSignatureXml(file, update.manage);\n\t\t\tResponseUpdate respup = update.execute(querydb);\n\t\t\tif (respup == null) {\n\t\t\t\tBSimError lastError = querydb.getLastError();\n\t\t\t\tif ((lastError.category == ErrorCategory.Format) ||\n\t\t\t\t\t(lastError.category == ErrorCategory.Nonfatal)) {\n\t\t\t\t\tMsg.warn(this, file.getName() + \": \" + lastError.message);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new IOException(file.getName() + \": \" + lastError.message);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java#L208-L244","documentation":"Thrown by BulkSignatures.sendUpdateToServer when gatherXml('update_', dir) returns an empty list. Analogous to the 'no signature files' error, the directory was readable but contained no metadata-update files prefixed 'update_', so there is nothing to send and the method aborts.","triggerScenarios":"Running sendUpdateToServer against a directory lacking update_* files; update XML generated into a different folder; updates not yet generated.","commonSituations":"Forgetting the generate-updates step; pointing at the sigs directory instead of the update directory; cleanup that removed update files.","solutions":["Generate the update XML files first so the directory contains update_* entries.","Point sendUpdateToServer at the directory holding the update_* files.","Verify the generation step wrote update_* files (vs sigs_*)."],"exampleFix":"// before\nbsim.sendUpdateToServer(new File(\"sigs-out\"));  // contains sigs_* not update_*\n\n// after\nbsim.sendUpdateToServer(new File(\"update-out\"));  // directory with update_* files","handlingStrategy":"validation","validationCode":"File dir = new File(path);\nFile[] matches = dir.listFiles((d, n) -> n.startsWith(\"update_\"));\nif (matches == null || matches.length == 0) {\n    throw new IOException(\"No update_* files in \" + dir);\n}","typeGuard":null,"tryCatchPattern":"try {\n    bsim.sendUpdateToServer(dir);\n} catch (IOException e) {\n    if (e.getMessage().startsWith(\"No update files found\")) {\n        // generate updates first, then retry\n    } else { throw e; }\n}","preventionTips":["Generate update_* files before calling sendUpdateToServer.","Point at the update directory, not the sigs directory.","Verify the update generation step actually emitted update_* files."],"tags":["bsim","ingest","missing-files","update","ioexception"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}