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

  1. Regenerate the query signature file using the same Ghidra version and BSim configuration used to populate the target database.
  2. Check the formatted versions in the exception text: align the query's major version and settings (0x..) to the database's values.
  3. If the database itself is stale, rebuild the BSim database from current signatures so both sides share identical settings.
  4. 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

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


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/9d123975850208e6. Report an issue: GitHub.