diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2013-04-13 16:46:04 (GMT) |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2013-04-13 16:46:04 (GMT) |
commit | 93196eb44f935de8132fd79e8be215657ea6b600 (patch) | |
tree | 973f08b65f19f2d48d33bde4734080caf16798f5 | |
parent | 171bb26b32a30d782fdb63d1f1bcb4aa72460944 (diff) | |
parent | c9734484ca774afad49e361f72cad60d937acf1b (diff) | |
download | cpython-93196eb44f935de8132fd79e8be215657ea6b600.zip cpython-93196eb44f935de8132fd79e8be215657ea6b600.tar.gz cpython-93196eb44f935de8132fd79e8be215657ea6b600.tar.bz2 |
Issue #17715: Merge fix from 3.3.
-rw-r--r-- | Lib/test/test_int.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/abstract.c | 2 |
3 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/test_int.py b/Lib/test/test_int.py index afc9169..4921230 100644 --- a/Lib/test/test_int.py +++ b/Lib/test/test_int.py @@ -354,6 +354,12 @@ class IntTestCases(unittest.TestCase): return 42 self.assertEqual(int(JustTrunc()), 42) + class ExceptionalTrunc(base): + def __trunc__(self): + 1 / 0 + with self.assertRaises(ZeroDivisionError): + int(ExceptionalTrunc()) + for trunc_result_base in (object, Classic): class Integral(trunc_result_base): def __int__(self): @@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1? Core and Builtins ----------------- +- Issue #17715: Fix segmentation fault from raising an exception in a __trunc__ + method. + - Issue #17643: Add __callback__ attribute to weakref.ref. - Issue #16447: Fixed potential segmentation fault when setting __name__ on a diff --git a/Objects/abstract.c b/Objects/abstract.c index 4326cfa..bfd53c9 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1314,6 +1314,8 @@ PyNumber_Long(PyObject *o) PyObject *truncated = PyEval_CallObject(trunc_func, NULL); PyObject *int_instance; Py_DECREF(trunc_func); + if (truncated == NULL) + return NULL; /* __trunc__ is specified to return an Integral type, but int() needs to return a int. */ int_instance = convert_integral_to_int(truncated, |