NationalSecurityAgency/ghidra · warning · IllegalArgumentException

Unsupported option specification: {}=

Error message

Unsupported option specification: {}=

What it means

Thrown when a boolean option (one not in VALUE_OPTIONS) is assigned a value using the = syntax. Boolean options like --commit, --overwrite, --nocallgraph, --force, --date, --printselfsig, --callgraph, --printjustexe, --includelibs do not accept values; their presence alone enables them.

Source

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

				}
			}

			if (!option.startsWith("--")) {
				if (sawOptions) {
					throw new IllegalArgumentException("Unexpected argument: " + option);
				}
				subParams.add(params[i]);
				continue;
			}

			sawOptions = true;
			if (!GLOBAL_OPTIONS.contains(option) && !allowedParams.contains(option)) {
				throw new IllegalArgumentException("Unsupported option use: " + optionName);
			}
			if (!VALUE_OPTIONS.contains(option)) {
				// consume option without value arg as a boolean option
				if (value != null) {
					throw new IllegalArgumentException(
						"Unsupported option specification: " + optionName + "=");
				}
				booleanOptions.add(option);
			}
			else if (!StringUtils.isBlank(value)) {
				optionValueMap.put(option, value);
			}
			else {
				// consume next param as option value
				if (++i == params.length) {
					throw new IllegalArgumentException("Missing option value: " + optionName);
				}
				optionValueMap.put(option, params[i]);
			}
		}
		return subParams;
	}

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Remove the value from the boolean option: use '--commit' instead of '--commit=true'.
  2. Check VALUE_OPTIONS (lines 100-103) to determine which options accept values.
  3. Use the bare flag form for all boolean options.

Example fix

// before
bsim generatesigs ghidra://server/Repo --bsim h2://localhost/db --overwrite=true
// error: Unsupported option specification: --overwrite=

// after
bsim generatesigs ghidra://server/Repo --bsim h2://localhost/db --overwrite
Defensive patterns

Strategy: validation

Validate before calling

Set<String> booleanOptions = Set.of("--commit","--date","--nocallgraph","--overwrite","--includelibs","--printselfsig","--callgraph","--printjustexe","--force");
for (String arg : args) {
    if (arg.contains("=")) {
        String optName = arg.substring(0, arg.indexOf("="));
        if (booleanOptions.contains(optName)) {
            throw new IllegalArgumentException("Boolean option " + optName + " does not accept a value");
        }
    }
}

Prevention

When it happens

Trigger: Using the --option=value syntax with a boolean flag, e.g., '--commit=true', '--force=yes', or '--overwrite=1'. The parser detects the = sign and rejects the value assignment for a non-value option.

Common situations: Habitually using key=value syntax for all options; migrating from a tool that accepts boolean values; misunderstanding which options take values vs. which are toggles.

Related errors


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