NationalSecurityAgency/ghidra · error · LSHException

Could not perform getexeinfo: {}

Error message

Could not perform getexeinfo: {}

What it means

Thrown in getExecutableRecords when QueryExeInfo.execute(querydb) returns null, i.e. the server could not answer the executable-info query. BulkSignatures rethrows the BSimError message as 'Could not perform getexeinfo: <message>' (LSHException). This wraps any null-response failure from the metadata query path.

Source

Thrown at Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java:701

			String archFilter, String compilerFilter, String sortCol, boolean incFakes)
			throws IOException, LSHException {

		establishQueryServerConnection(false);
		ExeTableOrderColumn sortEnum;
		if (sortCol != null) {
			sortEnum = ExeTableOrderColumn.valueOf(sortCol.toUpperCase());
		}
		else {
			sortEnum = ExeTableOrderColumn.MD5;
		}

		QueryExeInfo exeQuery = new QueryExeInfo(limit, md5Filter, exeNameFilter, archFilter,
			compilerFilter, sortEnum, incFakes);

		ResponseExe response = exeQuery.execute(querydb);
		if (response == null) {
			BSimError lastError = querydb.getLastError();
			throw new LSHException("Could not perform getexeinfo: " + lastError.message);
		}

		return response.records;
	}

	/**
	 * Retrieves the number of records in the database that match the filter criteria.
	 * 
	 * @param md5Filter the MD5 value must contain this
	 * @param exeNameFilter the executable name must contain this
	 * @param archFilter the architecture type must match this
	 * @param compilerFilter the compiler type must match this
	 * @param incFakes if true, include executables with an MD5 that we created
	 * @return the number of executables matching the filter criteria
	 * @throws IOException if there's a problem establishing the database connection
	 */
	public int getCount(String md5Filter, String exeNameFilter, String archFilter,
			String compilerFilter, boolean incFakes) throws IOException {

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Read the message for the specific server reason.
  2. Validate the sort column against ExeTableOrderColumn and sanitize filters before querying.
  3. Retry once for transient connection issues.
  4. Confirm client/server version compatibility.

Example fix

// before
bsim.getExecutableRecords(100, null, null, null, null, "BOGUS", false);  // bad sort -> LSHException

// after
// omit sortCol (defaults to MD5) or pass a valid ExeTableOrderColumn name
bsim.getExecutableRecords(100, null, null, null, null, null, false);
Defensive patterns

Strategy: validation

Validate before calling

// validate sort column before querying
if (sortCol != null) {
    try { ExeTableOrderColumn.valueOf(sortCol.toUpperCase()); }
    catch (IllegalArgumentException e) { sortCol = null; /* default MD5 */ }
}
bsim.getExecutableRecords(limit, md5Filter, exeNameFilter, archFilter, compilerFilter, sortCol, incFakes);

Try / catch

try {
    bsim.getExecutableRecords(limit, md5, name, arch, comp, sortCol, fakes);
} catch (LSHException e) {
    // message: "Could not perform getexeinfo: <server>"; sanitize filters/sort and retry
}

Prevention

When it happens

Trigger: Querying exe info while the connection drops, the backend errors on the filter/sort parameters, or the server reports a Fatal error for the query.

Common situations: Invalid sort column name, malformed filter values, transient connection loss mid-query, backend resource error, version/protocol skew.

Related errors


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