fix(terraform): handle hanging Terraform file parsing with process-based timeout #6871
+132
−6
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:
Introduce a
ProcessTimeout
class to handle cases where Terraform file parsing in Checkov hangs indefinitely. This new class uses subprocesses to enforce timeouts for blocking operations, complementing existing timeout mechanisms. Update the__parse_with_timeout
function to integrateProcessTimeout
, addressing race conditions and ensuring proper termination of hanging processes. These changes aim to improve the reliability of Checkov when scanning directories with the-d
flag.__parse_with_timeout
function to integrateProcessTimeout
and address race conditions.Modified files (1)
Latest Contributors(2)
Modified files (2)
Latest Contributors(2)