Skip to content

Commit

Permalink
fix an issue when searching for Ref in tojsonstring (#3107)
Browse files Browse the repository at this point in the history
  • Loading branch information
kddejong committed Mar 20, 2024
1 parent d706c39 commit fe06d0f
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 15 deletions.
18 changes: 13 additions & 5 deletions src/cfnlint/languageExtensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,24 @@ def validate_type(self, fn_object_val, matches, tree, intrinsic_function):
matches.append(RuleMatch(tree[:], message.format("/".join(map(str, tree)))))
return matches

def _find_in_obj(self, obj):
if isinstance(obj, dict):
for k, v in obj.items():
if k == "Ref":
yield v
return
yield from self._find_in_obj(v)

if isinstance(obj, list):
for v in obj:
yield from self._find_in_obj(v)

def validate_pseudo_parameters(
self, fn_object_val, matches, tree, pseudo_params, intrinsic_function
):
if isinstance(fn_object_val, dict):
ref = "Ref"
ref_list = [
val[ref]
for _, val in fn_object_val.items()
if hasattr(val, "__iter__") and ref in val
]
ref_list = self._find_in_obj(fn_object_val)
for ref in ref_list:
if ref in pseudo_params:
message = (
Expand Down
3 changes: 1 addition & 2 deletions src/cfnlint/rules/functions/ForEach.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ def match(self, cfn):
for for_each in for_eaches:
has_language_extensions_transform = cfn.has_language_extensions_transform()

LanguageExtensions.validate_transform_is_declared(
self,
LanguageExtensions().validate_transform_is_declared(
has_language_extensions_transform,
matches,
for_each[:-1],
Expand Down
3 changes: 1 addition & 2 deletions src/cfnlint/rules/functions/Length.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ def match(self, cfn):
fn_length_objects = cfn.search_deep_keys(intrinsic_function)
for fn_length_object in fn_length_objects:
tree = fn_length_object[:-1]
LanguageExtensions.validate_transform_is_declared(
self,
LanguageExtensions().validate_transform_is_declared(
has_language_extensions_transform,
matches,
tree,
Expand Down
10 changes: 4 additions & 6 deletions src/cfnlint/rules/functions/ToJsonString.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,16 @@ def match(self, cfn):
for fn_toJsonString_object in fn_toJsonString_objects:
tree = fn_toJsonString_object[:-1]
fn_toJsonString_object_value = fn_toJsonString_object[-1]
LanguageExtensions.validate_transform_is_declared(
self,
LanguageExtensions().validate_transform_is_declared(
has_language_extensions_transform,
matches,
tree,
intrinsic_function,
)
LanguageExtensions.validate_type(
self, fn_toJsonString_object_value, matches, tree, intrinsic_function
LanguageExtensions().validate_type(
fn_toJsonString_object_value, matches, tree, intrinsic_function
)
LanguageExtensions.validate_pseudo_parameters(
self,
LanguageExtensions().validate_pseudo_parameters(
fn_toJsonString_object_value,
matches,
tree,
Expand Down

0 comments on commit fe06d0f

Please sign in to comment.