Merged revisions 76764 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r76764 | antoine.pitrou | 2009-12-12 20:18:27 +0100 (sam., 12 déc. 2009) | 12 lines

  Merged revisions 76763 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r76763 | antoine.pitrou | 2009-12-12 20:13:08 +0100 (sam., 12 déc. 2009) | 7 lines

    Issue #7466: segmentation fault when the garbage collector is called
    in the middle of populating a tuple.  Patch by Florent Xicluna.

    (note: no NEWS entry for trunk since the bug was introduced in 2.7/3.1)
  ........
................
This commit is contained in:
Antoine Pitrou 2009-12-12 19:26:06 +00:00
parent a6cdd83f7f
commit 2795e6c1c4
3 changed files with 8 additions and 1 deletions

View File

@ -146,6 +146,9 @@ class TupleTest(seq_tests.CommonTest):
pass
self.check_track_dynamic(MyTuple, True)
def test_bug7466(self):
# Trying to untrack an unfinished tuple could crash Python
self._not_tracked(tuple(gc.collect() for i in range(101)))
def test_main():
support.run_unittest(TupleTest)

View File

@ -12,6 +12,9 @@ What's New in Python 3.1.2?
Core and Builtins
-----------------
- Issue #7466: segmentation fault when the garbage collector is called
in the middle of populating a tuple. Patch by Florent Xicluna.
- Issue #7419: setlocale() could crash the interpreter on Windows when called
with invalid values.

View File

@ -850,6 +850,7 @@ _PyTuple_Resize(PyObject **pv, Py_ssize_t newsize)
/* XXX UNREF/NEWREF interface should be more symmetrical */
_Py_DEC_REFTOTAL;
if (_PyObject_GC_IS_TRACKED(v))
_PyObject_GC_UNTRACK(v);
_Py_ForgetReference((PyObject *) v);
/* DECREF items deleted by shrinkage */