Anchor all referenced loop variables #4991
Merged
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.
Taking a reference to a loop variable produced by a range statement
can be dangerous. If that pointer is preserved elsewhere, for example
by being passed to a function which stores it, the resulting behavior
may not be what the author or reader expects.
When it is not feasible to structure code such that references to
loop variables are not taken at all, the loop variable can instead be
'anchored' by assigning it to itself.
This change anchors all loop range variables which are referenced and
then passed to arbitrary functions. It also removes our exclusion of
gosec'c G601 lint rule, which catches this error, to ensure we don't
reintroduce it later.
Depends on #4990
Fixes #4948