diff options
| author | Mark Dickinson <dickinsm@gmail.com> | 2010-09-26 10:37:12 (GMT) |
|---|---|---|
| committer | Mark Dickinson <dickinsm@gmail.com> | 2010-09-26 10:37:12 (GMT) |
| commit | cb61e5d9b59c1a5f18dd34edebb054d1e19f1581 (patch) | |
| tree | a52fa36e6297747487027f5d2344696a112df566 /Lib/test/test_long.py | |
| parent | 3eac591a5c33f4bd0bdd60a76053cd3b6b6e5918 (diff) | |
| download | cpython-cb61e5d9b59c1a5f18dd34edebb054d1e19f1581.zip cpython-cb61e5d9b59c1a5f18dd34edebb054d1e19f1581.tar.gz cpython-cb61e5d9b59c1a5f18dd34edebb054d1e19f1581.tar.bz2 | |
Issue #9869: Make long() and PyNumber_Long return something of type
long for a class whose __long__ method returns a plain int. This
fixes an interpreter crash (due to long_subtype_new assuming
PyNumber_Long returns a long) when initializing an instance of a long
subclass from an object whose __long__ method returns a plain int.
Diffstat (limited to 'Lib/test/test_long.py')
| -rw-r--r-- | Lib/test/test_long.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index 412ec7c..9706a8e 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -601,6 +601,22 @@ class LongTest(unittest.TestCase): slicemin, slicemax = X()[-2L**100:2L**100] self.assertEqual(X()[slicemin:slicemax], (slicemin, slicemax)) + def test_issue9869(self): + # Issue 9869: Interpreter crash when initializing an instance + # of a long subclass from an object whose __long__ method returns + # a plain int. + class BadLong(object): + def __long__(self): + return 1000000 + + class MyLong(long): + pass + + x = MyLong(BadLong()) + self.assertIsInstance(x, long) + self.assertEqual(x, 1000000) + + # ----------------------------------- tests of auto int->long conversion def test_auto_overflow(self): |
