Commit 79bcea0
gh-145678: Fix use-after-free in itertools.groupby _grouper_next()
_grouper_next() passed igo->tgtkey and gbo->currkey directly to
PyObject_RichCompareBool() without first holding strong references.
A re-entrant __eq__ that advanced the parent groupby iterator would
call groupby_step(), which executes Py_XSETREF(gbo->currkey, newkey),
freeing currkey while it was still under comparison.
Fix by taking INCREF'd local snapshots before the comparison, mirroring
the protection added to groupby_next() in gh-143543.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent 0dfe649 commit 79bcea0
File tree
3 files changed
+52
-1
lines changed- Lib/test
- Misc/NEWS.d/next/Library
- Modules
3 files changed
+52
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
754 | 754 | | |
755 | 755 | | |
756 | 756 | | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
757 | 791 | | |
758 | 792 | | |
759 | 793 | | |
| |||
Lines changed: 7 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
678 | 678 | | |
679 | 679 | | |
680 | 680 | | |
681 | | - | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
682 | 692 | | |
683 | 693 | | |
684 | 694 | | |
| |||
0 commit comments