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.1')
|
||||||
testformat('%#g', 1.1, '1.10000')
|
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
|
# Test exception for unknown format characters
|
||||||
if verbose:
|
if verbose:
|
||||||
print 'Testing exceptions'
|
print 'Testing exceptions'
|
||||||
|
|
|
@ -9,6 +9,9 @@ What's New in Python 2.7.4
|
||||||
Core and Builtins
|
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
|
- Issue #16839: Fix a segfault when calling unicode() on a classic class early
|
||||||
in interpreter initialization.
|
in interpreter initialization.
|
||||||
|
|
||||||
|
|
|
@ -4489,7 +4489,10 @@ PyString_Format(PyObject *format, PyObject *args)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
iobj = PyNumber_Int(v);
|
iobj = PyNumber_Int(v);
|
||||||
if (iobj==NULL) iobj = PyNumber_Long(v);
|
if (iobj==NULL) {
|
||||||
|
PyErr_Clear();
|
||||||
|
iobj = PyNumber_Long(v);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (iobj!=NULL) {
|
if (iobj!=NULL) {
|
||||||
if (PyInt_Check(iobj)) {
|
if (PyInt_Check(iobj)) {
|
||||||
|
|
Loading…
Reference in New Issue