[Python-checkins] r60228 - python/trunk/Lib/test/test_descr.py

guido.van.rossum python-checkins at python.org
Thu Jan 24 00:23:43 CET 2008


Author: guido.van.rossum
Date: Thu Jan 24 00:23:43 2008
New Revision: 60228

Modified:
   python/trunk/Lib/test/test_descr.py
Log:
Turn three recently fixed crashers into regular tests.


Modified: python/trunk/Lib/test/test_descr.py
==============================================================================
--- python/trunk/Lib/test/test_descr.py	(original)
+++ python/trunk/Lib/test/test_descr.py	Thu Jan 24 00:23:43 2008
@@ -1,5 +1,7 @@
 # Test enhancements related to descriptors and new-style classes
 
+# XXX Please, please, please, someone convert this to unittest style!
+
 from test.test_support import verify, vereq, verbose, TestFailed, TESTFN, get_original_stdout
 from copy import deepcopy
 import warnings
@@ -4427,6 +4429,8 @@
     # ceval.c's assign_slice used to check for
     # tp->tp_as_sequence->sq_slice instead of
     # tp->tp_as_sequence->sq_ass_slice
+    if verbose:
+        print "Testing assign_slice..."
 
     class C(object):
         def __setslice__(self, start, stop, value):
@@ -4436,8 +4440,70 @@
     c[1:2] = 3
     vereq(c.value, 3)
 
+def test_weakref_in_del_segfault():
+    # This used to segfault until r60057
+    if verbose:
+        print "Testing weakref in del segfault..."
+
+    import weakref
+    global ref
+
+    class Target():
+        def __del__(self):
+            global ref
+            ref = weakref.ref(self)
+
+    w = Target()
+    del w
+    del ref
+
+def test_borrowed_ref_3_segfault():
+    # This used to segfault until r60224
+    if verbose:
+        print "Testing borrowed ref 3 segfault..."
+
+    class KeyFunc(object):
+        def __call__(self, n):
+            del d['key']
+            return 1
+
+    d = {'key': KeyFunc()}
+    try:
+        min(range(10), **d)
+    except:
+        pass
+
+def test_borrowed_ref_4_segfault():
+    # This used to segfault until r60224
+    if verbose:
+        print "Testing borrowed ref 4 segfault..."
+
+    import types
+    import __builtin__
+
+
+    class X(object):
+        def __getattr__(self, name):
+            # this is called with name == '__bases__' by PyObject_IsInstance()
+            # during the unbound method call -- it frees the unbound method
+            # itself before it invokes its im_func.
+            del __builtin__.__import__
+            return ()
+
+    pseudoclass = X()
+
+    class Y(object):
+        def __call__(self, *args):
+            # 'self' was freed already
+            return (self, args)
+
+    # make an unbound method
+    __builtin__.__import__ = types.MethodType(Y(), None, (pseudoclass, str))
+    import spam
+
+
 def test_main():
-    weakref_segfault() # Must be first, somehow
+    #XXXweakref_segfault() # Must be first, somehow
     wrapper_segfault()
     do_this_first()
     class_docstrings()
@@ -4535,6 +4601,9 @@
     methodwrapper()
     notimplemented()
     test_assign_slice()
+    test_weakref_in_del_segfault()
+    test_borrowed_ref_3_segfault()
+    test_borrowed_ref_4_segfault()
 
     if verbose: print "All OK"
 


More information about the Python-checkins mailing list