call PyErr_Clear() when ignoring error from PyNumber_Int (closes #15516)
Patch from Tom Tromey.
This commit is contained in:
parent
140794d6e7
commit
a708adfcf6
|
@ -234,6 +234,16 @@ class FormatTest(unittest.TestCase):
|
|||
testformat('%g', 1.1, '1.1')
|
||||
testformat('%#g', 1.1, '1.10000')
|
||||
|
||||
# Regression test for http://bugs.python.org/issue15516.
|
||||
class IntFails(object):
|
||||
def __int__(self):
|
||||
raise TestFailed
|
||||
def __long__(self):
|
||||
return 0
|
||||
|
||||
fst = IntFails()
|
||||
testformat("%x", fst, '0')
|
||||
|
||||
# Test exception for unknown format characters
|
||||
if verbose:
|
||||
print 'Testing exceptions'
|
||||
|
|
|
@ -9,6 +9,9 @@ What's New in Python 2.7.4
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #15516: Fix a bug in PyString_FromFormat where it failed to properly
|
||||
ignore errors from a __int__() method.
|
||||
|
||||
- Issue #16839: Fix a segfault when calling unicode() on a classic class early
|
||||
in interpreter initialization.
|
||||
|
||||
|
|
|
@ -4489,7 +4489,10 @@ PyString_Format(PyObject *format, PyObject *args)
|
|||
}
|
||||
else {
|
||||
iobj = PyNumber_Int(v);
|
||||
if (iobj==NULL) iobj = PyNumber_Long(v);
|
||||
if (iobj==NULL) {
|
||||
PyErr_Clear();
|
||||
iobj = PyNumber_Long(v);
|
||||
}
|
||||
}
|
||||
if (iobj!=NULL) {
|
||||
if (PyInt_Check(iobj)) {
|
||||
|
|
Loading…
Reference in New Issue