Del statement inference enabled pyregr.test_descr testcase and it SIGSEGVs.
Here is minimal example:

import unittest
import sys

class Foo(unittest.TestCase):
    def test_file_fault(self):
        # Testing sys.stdout is changed in getattr...
        test_stdout = sys.stdout
        class StdoutGuard:
            def __getattr__(self, attr):
                test_stdout.write('%d\n' % sys.getrefcount(self))
                sys.stdout =  test_stdout #sys.__stdout__
                test_stdout.write('%d\n' % sys.getrefcount(self))
                test_stdout.write('getattr: %r\n' % attr)
                test_stdout.flush()
                raise RuntimeError("Premature access to sys.stdout.%s" % attr)
        sys.stdout = StdoutGuard()
        try:
            print "Oops!"
        except RuntimeError:
            pass
        finally:
            sys.stdout = test_stdout

    def test_getattr_hooks(self):
        pass

from test import test_support
test_support.run_unittest(Foo)

It works in python and sigsegvs in cython.
It seems to me that the problem is StdoutGuard() is still used when
its reference counter is zero since Python interpreter does
Py_XINCREF() for file object and __Pyx_Print() doesn't.

-- 
vitja.
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to