From b1ddd334a9dfef2226877d64cbdf2ef15c027c5a Mon Sep 17 00:00:00 2001 From: Kevin DeJong Date: Tue, 10 Dec 2024 11:10:58 -0800 Subject: [PATCH] fix returning None from FindInMap (#3866) --- src/cfnlint/template/transforms/_language_extensions.py | 5 ++++- .../template/transforms/test_language_extensions.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cfnlint/template/transforms/_language_extensions.py b/src/cfnlint/template/transforms/_language_extensions.py index be6c442981..5263cf6868 100644 --- a/src/cfnlint/template/transforms/_language_extensions.py +++ b/src/cfnlint/template/transforms/_language_extensions.py @@ -392,9 +392,12 @@ def value( if mapping: try: - return mapping.get(t_map[1].value(cfn, params, only_params), {}).get( + value = mapping.get(t_map[1].value(cfn, params, only_params), {}).get( t_map[2].value(cfn, params, only_params) ) + if value is None: + raise _ResolveError("Can't resolve Fn::FindInMap", self._obj) + return value except _ResolveError as e: if len(self._map) == 4 and default_on_resolver_failure: return self._map[3].value(cfn, params, only_params) diff --git a/test/unit/module/template/transforms/test_language_extensions.py b/test/unit/module/template/transforms/test_language_extensions.py index 921929e7cb..f992f88cd6 100644 --- a/test/unit/module/template/transforms/test_language_extensions.py +++ b/test/unit/module/template/transforms/test_language_extensions.py @@ -299,6 +299,14 @@ def test_find_in_map_values_with_default(self): with self.assertRaises(_ResolveError): map.value(self.cfn, None, False, False) + def test_find_in_map_values_not_found_with_default(self): + map = _ForEachValueFnFindInMap( + "a", ["Bucket", "Production", "DNE", {"DefaultValue": "bar"}] + ) + + self.assertEqual(map.value(self.cfn, None, False, True), "bar") + self.assertEqual(map.value(self.cfn, None, False, False), ["foo", "bar"]) + def test_find_in_map_values_without_default(self): map = _ForEachValueFnFindInMap("a", ["Bucket", {"Ref": "Foo"}, "Key"])