gh-154570: Fix itertools.accumulate() silently corrupting its total on reentrancy#154571
Open
PhysicistJohn wants to merge 1 commit into
Open
gh-154570: Fix itertools.accumulate() silently corrupting its total on reentrancy#154571PhysicistJohn wants to merge 1 commit into
PhysicistJohn wants to merge 1 commit into
Conversation
…otal on reentrancy
A source iterable or func= callable that calls back into next() on
the same accumulate object mid-step silently corrupted the running
total instead of erroring.
Adds a running guard field to accumulateobject, mirroring the
existing pattern already used by teedataobject for the identical
class of bug (see teedataobject_getitem_lock_held). accumulate now
raises RuntimeError("cannot re-enter the accumulate iterator") on
reentrant access instead of silently corrupting state, matching
tee's existing behavior for the same defect class.
Adds a regression test (test_accumulate_reenter) in the same style
as the existing test_tee_reenter.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
A source iterable or
func=callable that calls back intonext()onthe same
accumulateobject mid-step silently corrupted the runningtotal instead of erroring. Fixes gh-154570.
Adds a
runningguard field toaccumulateobject, mirroring theexisting pattern already used by
teedataobjectfor the identicalclass of bug (see
teedataobject_getitem_lock_held).accumulatenow raises
RuntimeError("cannot re-enter the accumulate iterator")on reentrant access instead of silently corrupting state, matching
tee's existing behavior for the same defect class.Adds a regression test (
test_accumulate_reenter) in the same styleas the existing
test_tee_reenter.