NationalSecurityAgency/ghidra · error · LSHException
Problems loading score cache:
Error message
Problems loading score cache:
What it means
Thrown by FileScoreCaching.getSigThreshold() wrapping any IOException from loadCache(). Identical mechanism to getSimThreshold() but retrieves the significance threshold. The message string is the same ("Problems loading score cache: ") but the throw site is the sigThreshold accessor at line 130.
Source
Thrown at Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/FileScoreCaching.java:130
@Override
public double getSimThreshold() throws LSHException {
try {
loadCache();
}
catch (IOException e) {
throw new LSHException("Problems loading score cache: " + e.getMessage());
}
return simThreshold;
}
@Override
public double getSigThreshold() throws LSHException {
try {
loadCache();
}
catch (IOException e) {
throw new LSHException("Problems loading score cache: " + e.getMessage());
}
return sigThreshold;
}
@Override
public void prefetchScores(Set<ExecutableRecord> exeSet, List<ExecutableRecord> missing)
throws LSHException {
try {
loadCache();
}
catch (IOException e) {
throw new LSHException("Could not prefetch scores: " + e.getMessage());
}
if (missing != null) {
if (cacheMap == null) {
for (ExecutableRecord exeRec : exeSet) {
missing.add(exeRec); // Everything is missing
}View on GitHub (pinned to d5f144c24d)
Solutions
- Fix or regenerate the cache file via resetStorage(simThresh, sigThresh).
- Inspect the wrapped IOException message to diagnose the specific parse or I/O failure.
- Validate the cache file format (two float header lines) before relying on it.
Example fix
// before
double sig = cache.getSigThreshold(); // throws if cache corrupt
// after
catch (LSHException e) {
cache.resetStorage(defaultSimThresh, defaultSigThresh);
double sig = cache.getSigThreshold();
} Defensive patterns
Strategy: try-catch
Validate before calling
File cacheFile = new File(cachePath);
if (cacheFile.exists() && cacheFile.length() < 10) {
cacheFile.delete();
} Try / catch
try {
double sig = cache.getSigThreshold();
} catch (LSHException e) {
if (e.getMessage().startsWith("Problems loading")) {
cache.resetStorage(defaultSimThresh, defaultSigThresh);
double sig = cache.getSigThreshold();
} else throw e;
} Prevention
- Treat getSigThreshold failures the same as getSimThreshold — both load the same cache.
- Reset the cache and reinitialize thresholds on corruption.
- Validate the cache file before relying on threshold accessors.
When it happens
Trigger: Calling getSigThreshold() when the cache file is corrupt or unreadable. Like getSimThreshold, this can fire during ExecutableScorerSingle construction which reads both thresholds from the cache.
Common situations: Same corrupt-file scenarios as the simThreshold variant — the cache file was truncated, has bad lines, or is unreadable. Typically both threshold accessors fail together if the cache is corrupt.
Related errors
- Problems loading score cache: {e.getMessage()}
- Could not recover cached scores: {e.getMessage()}
- Could not commit self-score: {ex.getMessage()}
- Could not prefetch scores:
- Score file missing threshold lines
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/c84bab716e61e1c4.
Report an issue: GitHub.