fix(terraform): handle hanging Terraform file parsing with process-based timeout #6871
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
User description
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
Description
This PR introduces a
ProcessTimeout
class to handle cases where Terraform file parsing in Checkov hangs indefinitely, particularly when using the-d
flag to scan directories. TheProcessTimeout
class uses subprocesses to enforce timeouts for blocking operations, complementing the existingSignalTimeout
andThreadingTimeout
mechanisms. Additionally, updates were made to__parse_with_timeout
to address race conditions.Changes include:
ProcessTimeout
:__parse_with_timeout
:-d
flag.Testing
Before the fix, running Checkov with a syntax error in the Terraform file would result in Checkov hanging indefinitely. After the fix, Checkov terminates the process and logs the parsing error properly. Example output:
Running Pytests and coverage modules
pipenv run python -m coverage run -m pytest tests
:Files created while testing
Fixes #6762
Questions
checkov/version.py
?checkov/common/util/stopit
classes, should I create test files for the timeout classes? maybe another PR for this [enhancement]Checklist:
Generated description
Below is a concise technical summary of the changes proposed in this PR:
Introduces a new
ProcessTimeout
class to handle cases where Terraform file parsing hangs indefinitely. Updates the__parse_with_timeout
function to useProcessTimeout
as a fallback mechanism for non-main threads and blocking operations. This complements the existingSignalTimeout
andThreadingTimeout
mechanisms, addressing issues with hanging parsers when using the-d
flag to scan directories.Modified files (1)
Latest Contributors(2)
Modified files (2)
Latest Contributors(2)