From e98bcb1169f65c1dec5e8fe1038f149381684413 Mon Sep 17 00:00:00 2001 From: Rey Abolofia Date: Tue, 28 Jul 2026 16:59:06 -0700 Subject: [PATCH] Guard against non-dict Payload in is_step_function_event Some Step Functions integrations pass a string Payload, which previously caused incorrect behavior when checking for step function event fields. --- datadog_lambda/trigger.py | 2 ++ tests/test_trigger.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/datadog_lambda/trigger.py b/datadog_lambda/trigger.py index 0cd7f56b..6958b9de 100644 --- a/datadog_lambda/trigger.py +++ b/datadog_lambda/trigger.py @@ -461,6 +461,8 @@ def is_step_function_event(event): The actual event must contain "Execution", "StateMachine", and "State" fields. """ event = event.get("Payload", event) + if not isinstance(event, dict): + return False # JSONPath style if "Execution" in event and "StateMachine" in event and "State" in event: diff --git a/tests/test_trigger.py b/tests/test_trigger.py index 477aeec1..eb21f1e3 100644 --- a/tests/test_trigger.py +++ b/tests/test_trigger.py @@ -757,3 +757,7 @@ def test_is_step_function_event_dd_header(self): } } self.assertFalse(is_step_function_event(event)) + + def test_is_step_function_event_payload_not_dict(self): + event = {"Payload": "This is a string, not a dict"} + self.assertFalse(is_step_function_event(event))