Skip to content

Commit fe06d0f

Browse files
authored
fix an issue when searching for Ref in tojsonstring (#3107)
1 parent d706c39 commit fe06d0f

File tree

4 files changed

+19
-15
lines changed

4 files changed

+19
-15
lines changed

src/cfnlint/languageExtensions.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,24 @@ def validate_type(self, fn_object_val, matches, tree, intrinsic_function):
2424
matches.append(RuleMatch(tree[:], message.format("/".join(map(str, tree)))))
2525
return matches
2626

27+
def _find_in_obj(self, obj):
28+
if isinstance(obj, dict):
29+
for k, v in obj.items():
30+
if k == "Ref":
31+
yield v
32+
return
33+
yield from self._find_in_obj(v)
34+
35+
if isinstance(obj, list):
36+
for v in obj:
37+
yield from self._find_in_obj(v)
38+
2739
def validate_pseudo_parameters(
2840
self, fn_object_val, matches, tree, pseudo_params, intrinsic_function
2941
):
3042
if isinstance(fn_object_val, dict):
3143
ref = "Ref"
32-
ref_list = [
33-
val[ref]
34-
for _, val in fn_object_val.items()
35-
if hasattr(val, "__iter__") and ref in val
36-
]
44+
ref_list = self._find_in_obj(fn_object_val)
3745
for ref in ref_list:
3846
if ref in pseudo_params:
3947
message = (

src/cfnlint/rules/functions/ForEach.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ def match(self, cfn):
2727
for for_each in for_eaches:
2828
has_language_extensions_transform = cfn.has_language_extensions_transform()
2929

30-
LanguageExtensions.validate_transform_is_declared(
31-
self,
30+
LanguageExtensions().validate_transform_is_declared(
3231
has_language_extensions_transform,
3332
matches,
3433
for_each[:-1],

src/cfnlint/rules/functions/Length.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ def match(self, cfn):
2626
fn_length_objects = cfn.search_deep_keys(intrinsic_function)
2727
for fn_length_object in fn_length_objects:
2828
tree = fn_length_object[:-1]
29-
LanguageExtensions.validate_transform_is_declared(
30-
self,
29+
LanguageExtensions().validate_transform_is_declared(
3130
has_language_extensions_transform,
3231
matches,
3332
tree,

src/cfnlint/rules/functions/ToJsonString.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,16 @@ def match(self, cfn):
2727
for fn_toJsonString_object in fn_toJsonString_objects:
2828
tree = fn_toJsonString_object[:-1]
2929
fn_toJsonString_object_value = fn_toJsonString_object[-1]
30-
LanguageExtensions.validate_transform_is_declared(
31-
self,
30+
LanguageExtensions().validate_transform_is_declared(
3231
has_language_extensions_transform,
3332
matches,
3433
tree,
3534
intrinsic_function,
3635
)
37-
LanguageExtensions.validate_type(
38-
self, fn_toJsonString_object_value, matches, tree, intrinsic_function
36+
LanguageExtensions().validate_type(
37+
fn_toJsonString_object_value, matches, tree, intrinsic_function
3938
)
40-
LanguageExtensions.validate_pseudo_parameters(
41-
self,
39+
LanguageExtensions().validate_pseudo_parameters(
4240
fn_toJsonString_object_value,
4341
matches,
4442
tree,

0 commit comments

Comments
 (0)