diff --git a/checkov/terraform/module_loading/module_finder.py b/checkov/terraform/module_loading/module_finder.py index 25ee12a81c..93ae207f64 100644 --- a/checkov/terraform/module_loading/module_finder.py +++ b/checkov/terraform/module_loading/module_finder.py @@ -60,7 +60,7 @@ def find_modules(path: str, loaded_files_cache: Optional[Dict[str, Any]] = None, if parsing_errors is None: parsing_errors = {} - excluded_paths_regex = re.compile('|'.join(f"({excluded_paths})")) if excluded_paths else None + excluded_paths_regex = re.compile('|'.join(f"({p})" for p in excluded_paths)) if excluded_paths else None for root, _, full_file_names in os.walk(path): for file_name in full_file_names: if not file_name.endswith(".tf"): diff --git a/tests/terraform/module_loading/test_tf_module_finder.py b/tests/terraform/module_loading/test_tf_module_finder.py index 9bfb137ab5..c93d5e3927 100644 --- a/tests/terraform/module_loading/test_tf_module_finder.py +++ b/tests/terraform/module_loading/test_tf_module_finder.py @@ -48,6 +48,18 @@ def test_module_finder_nested_blocks(self): self.assertEqual(1, len(modules)) self.assertEqual("3.14.0", modules[0].version) + def test_module_finder_excluded_paths_multiple_patterns(self): + cur_dir = os.path.abspath(os.path.dirname(__file__)) + src_dir = os.path.join(cur_dir, 'data', 'tf_module_downloader') + # public_modules/main.tf defines two modules and + # private_registry_modules/main.tf defines one. Excluding + # public_modules leaves just the private one. + modules = find_modules( + src_dir, + excluded_paths=['public_modules', 'no_such_dir'], + ) + self.assertEqual(1, len(modules)) + def test_downloader(self): modules = find_modules(self.get_src_dir())