google/tsunami-security-scanner · error · LookupError
No payload implemented for
Error message
No payload implemented for %s vulnerability type, %s interpretation environment, and %s execution environment.
What it means
PayloadGenerator.generate/generate_no_callback look up a payload matching the config's vulnerability type plus interpretation/execution environments. When the pre-loaded payload table has no match even without callback, LookupError is raised because the generator cannot fabricate a payload for that combination.
Solutions
- Check the error message's three interpolated values and compare against the payload definitions actually loaded
- Add a payload definition covering that vulnerability type + environments (in the payload proto/text resources)
- Verify the payload files are being loaded and validated (payload_utility.get_parsed_payload) before generation
- Fall back to a supported environment combination or catch LookupError and skip the vulnerability test
Example fix
// before
payload = generator.generate(config)
// after
try:
payload = generator.generate(config)
except LookupError:
logging.warning('No payload for %s; skipping', config.vulnerability_type)
return None Defensive patterns
Strategy: try-catch
Validate before calling
def has_payload(generator, config):
return (generator._find_matching_payload(config, True) is not None or
generator._find_matching_payload(config, False) is not None) Try / catch
try:
payload = generator.generate(config)
except LookupError as e:
logging.warning('Unsupported payload combination: %s', e)
payload = None Prevention
- Keep payload definitions in sync with every supported VulnerabilityType enum value
- Write a startup check that generates a payload for each configured vulnerability type
- Pin plugin and payload-resource versions together
When it happens
Trigger: Calling generate(config) with a VulnerabilityType / InterpretationEnvironment / ExecutionEnvironment combination that has no payload definition registered, or with use_callback=True when callback server handling yields no match and no fallback exists.
Common situations: Custom or recently added vulnerability types without corresponding payload definitions; payload files not loaded (wrong path/package); enum value typo mapping to an unsupported environment combination; plugin SDK version mismatch leaving new payload types undefined.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Validation type not supported.
- No valid payload input is entered.
- Parse payload does not have a name.
- Parse payload does not have an interpretation environment.
- Invalid network service
AI-assisted analysis of google/tsunami-security-scanner@363ba87b35 (2026-09-13).
Data as JSON: /api/errors/9faf83ec6302998c.
Report an issue: GitHub.
Appendix: source
Thrown at plugin_server/py/plugin/payload/payload_generator.py:83
config: Payload generator config detailing the attributes required for the
selected payload.
Returns:
A matching payload per the payload generator config.
"""
return self._generate_payload(config, False)
def _generate_payload(
self, config: pg.PayloadGeneratorConfig, use_callback: bool
) -> Payload:
"""Find matching payload per the provided attributes."""
payload = None
if self.tcs_client.is_callback_server_enabled() and use_callback:
payload = self._find_matching_payload(config, use_callback)
if not payload:
payload = self._find_matching_payload(config, False)
if not payload:
raise LookupError(
'No payload implemented for %s vulnerability type, %s interpretation'
' environment, and %s execution environment.'
% (
pg.PayloadGeneratorConfig.VulnerabilityType.Name(
config.vulnerability_type
),
pg.PayloadGeneratorConfig.InterpretationEnvironment.Name(
config.interpretation_environment
),
pg.PayloadGeneratorConfig.ExecutionEnvironment.Name(
config.execution_environment
),
)
)
return payload
def _find_matching_payload(
self, config: pg.PayloadGeneratorConfig, use_callback: boolView on GitHub (pinned to 363ba87b35)