NationalSecurityAgency/ghidra · error · IOException
No update files found in {}
Error message
No update files found in {} What it means
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.
Source
Thrown at Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java:226
if (insertreq.execute(querydb) == null) {
BSimError lastError = querydb.getLastError();
if ((lastError.category == ErrorCategory.Format) ||
(lastError.category == ErrorCategory.Nonfatal)) {
Msg.warn(this, file.getName() + ": " + lastError.message);
}
else {
throw new IOException(file.getName() + ": " + lastError.message);
}
}
}
}
protected void sendUpdateToServer(File dir) throws IOException, SAXException, LSHException {
establishQueryServerConnection(true);
List<File> files = gatherXml("update_", dir);
if (files.isEmpty()) {
throw new IOException("No update files found in " + dir.getAbsolutePath());
}
for (File file : files) {
Msg.info(this, "Updating metadata for " + file.getName());
QueryUpdate update = new QueryUpdate();
loadSignatureXml(file, update.manage);
ResponseUpdate respup = update.execute(querydb);
if (respup == null) {
BSimError lastError = querydb.getLastError();
if ((lastError.category == ErrorCategory.Format) ||
(lastError.category == ErrorCategory.Nonfatal)) {
Msg.warn(this, file.getName() + ": " + lastError.message);
}
else {
throw new IOException(file.getName() + ": " + lastError.message);
}
}
else {View on GitHub (pinned to d5f144c24d)
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_*).
Example fix
// before
bsim.sendUpdateToServer(new File("sigs-out")); // contains sigs_* not update_*
// after
bsim.sendUpdateToServer(new File("update-out")); // directory with update_* files Defensive patterns
Strategy: validation
Validate before calling
File dir = new File(path);
File[] matches = dir.listFiles((d, n) -> n.startsWith("update_"));
if (matches == null || matches.length == 0) {
throw new IOException("No update_* files in " + dir);
} Try / catch
try {
bsim.sendUpdateToServer(dir);
} catch (IOException e) {
if (e.getMessage().startsWith("No update files found")) {
// generate updates first, then retry
} else { throw e; }
} Prevention
- Generate update_* files before calling sendUpdateToServer.
- Point at the update directory, not the sigs directory.
- Verify the update generation step actually emitted update_* files.
When it happens
Trigger: Running sendUpdateToServer against a directory lacking update_* files; update XML generated into a different folder; updates not yet generated.
Common situations: Forgetting the generate-updates step; pointing at the sigs directory instead of the update directory; cleanup that removed update files.
Related errors
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/08e120a4fc9e3ec9.
Report an issue: GitHub.