mirror of https://github.com/python/cpython
Issue #17715: Merge fix from 3.3.
This commit is contained in:
commit
93196eb44f
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue