From e876bb04990eed42ee2bf0425cbadb346229474b Mon Sep 17 00:00:00 2001 From: Akanksha Trehun Date: Thu, 17 Sep 2026 00:10:57 +0530 Subject: [PATCH] Fix convert_from_dapr_duration silently accepting an empty string Signed-off-by: Akanksha Trehun --- dapr/serializers/util.py | 2 +- tests/serializers/test_util.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/dapr/serializers/util.py b/dapr/serializers/util.py index 522ad03d3..e4e5c8569 100644 --- a/dapr/serializers/util.py +++ b/dapr/serializers/util.py @@ -33,7 +33,7 @@ def convert_from_dapr_duration(duration: str) -> timedelta: """ matched = DAPR_DURATION_PARSER.match(duration) - if not matched or matched.lastindex == 0: + if not matched or matched.lastindex is None: raise ValueError(f"Invalid Dapr Duration format: '{duration}'") days = 0.0 diff --git a/tests/serializers/test_util.py b/tests/serializers/test_util.py index 25124fdf6..b09fe78ff 100644 --- a/tests/serializers/test_util.py +++ b/tests/serializers/test_util.py @@ -57,6 +57,16 @@ def test_convert_invalid_duration(self): "Invalid Dapr Duration format: '{}'".format('invalid'), ) + def test_convert_empty_duration_raises(self): + # An empty string matches the regex trivially (every group is optional), so + # matched.lastindex stays None instead of becoming a real group index. + with self.assertRaises(ValueError) as exeception_context: + convert_from_dapr_duration('') + self.assertEqual( + exeception_context.exception.args[0], + "Invalid Dapr Duration format: ''", + ) + def test_convert_timedelta_to_dapr_duration(self): duration = convert_to_dapr_duration( timedelta(hours=4, minutes=15, seconds=40, milliseconds=123, microseconds=35)