NationalSecurityAgency/ghidra · error · LSHException
Query signature data does not match database
Error message
Query signature data does not match database
What it means
Thrown by FunctionDatabase.checkSettingsForQuery when the query signature data's version/settings do not match the database's (checkSignatureSettings returns 2, indicating a major-version or settings mismatch, or minor versions that differ by more than 1). BSim enforces this so a query is only run against a database with compatible signature settings, preventing meaningless similarity comparisons.
Source
Thrown at Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/FunctionDatabase.java:224
* @param query an object describing the query
* @return the response object or null if there is an error
*/
public QueryResponseRecord query(BSimQuery<?> query);
public static void checkSettingsForQuery(DescriptionManager manage, DatabaseInformation info)
throws LSHException {
final int res = info.checkSignatureSettings(manage.getMajorVersion(),
manage.getMinorVersion(), manage.getSettings());
if (res <= 1) {
return;
}
if (res == 4) {
return;
}
if (res == 3) {
throw new LSHException("Query signature data has no setting information");
}
throw new LSHException("Query signature data " +
getFormattedVersion(manage.getMajorVersion(), manage.getMinorVersion(),
manage.getSettings()) +
" does not match database " +
getFormattedVersion(info.major, info.minor, info.settings));
}
private static String getFormattedVersion(int maj, int min, int settings) {
return String.format("%d.%d:0x%02x", maj, min, settings);
}
public static boolean checkSettingsForInsert(DescriptionManager manage,
DatabaseInformation info) throws LSHException, DatabaseNonFatalException {
if (manage.numFunctions() == 0) {
throw new DatabaseNonFatalException("Empty signature file");
}
int res = info.checkSignatureSettings(manage.getMajorVersion(), manage.getMinorVersion(),
manage.getSettings());
if (res == 0) {View on GitHub (pinned to d5f144c24d)
Solutions
- Regenerate the query signature file using the same Ghidra version and BSim configuration used to populate the target database.
- Check the formatted versions in the exception text: align the query's major version and settings (0x..) to the database's values.
- If the database itself is stale, rebuild the BSim database from current signatures so both sides share identical settings.
- Confirm you are pointing the query at the correct database instance.
Example fix
// before // Querying db built with settings 0x05 using signatures built with settings 0x06 FunctionDatabase.checkSettingsForQuery(manage, info); // after // Regenerate signatures with the same configuration as the database FunctionDatabase.checkSettingsForQuery(manage, info); // versions now match
Defensive patterns
Strategy: try-catch
Validate before calling
// Compare versions before calling checkSettingsForQuery
int res = info.checkSignatureSettings(manage.getMajorVersion(), manage.getMinorVersion(), manage.getSettings());
if (res == 2) {
throw new IllegalStateException(String.format(
"Query settings %d.%d:0x%02x do not match db %d.%d:0x%02x; regenerate signatures or rebuild db",
manage.getMajorVersion(), manage.getMinorVersion(), manage.getSettings(),
info.major, info.minor, info.settings));
}
FunctionDatabase.checkSettingsForQuery(manage, info); Try / catch
try {
FunctionDatabase.checkSettingsForQuery(manage, info);
} catch (LSHException e) {
if (e.getMessage().contains("does not match database")) {
log.error("Settings/version mismatch between query signatures and database", e);
}
throw e;
} Prevention
- Pin the Ghidra/BSim version used to build the database and to generate query signatures.
- Read the database's recorded settings and compare to your signature file before querying.
- Treat a settings mismatch as a pipeline-consistency bug, not a runtime hiccup.
When it happens
Trigger: Calling checkSettingsForQuery where the DescriptionManager's (major,minor,settings) differ from the DatabaseInformation's stored values. Res == 2 specifically: major version mismatch, settings value mismatch, or minor versions more than 1 apart.
Common situations: The query signature file was generated with a different BSim configuration or a different major Ghidra version than the target database. Mixing signature files from different BSim databases or different deployments. Upgrading Ghidra and querying an old database with newly-generated signatures.
Related errors
- Query signature data has no setting information
- Trying to insert signature data with slight differences in s
- Trying to insert signature data with settings that don't ma
- Trying to insert signature data with no setting information
- Cannot have signature setting of 0
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/9d123975850208e6.
Report an issue: GitHub.