Merged revisions 65339-65340,65342 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r65339 | amaury.forgeotdarc | 2008-07-31 23:28:03 +0200 (jeu., 31 juil. 2008) | 5 lines #3479: unichr(2**32) used to return u'\x00'. The argument was fetched in a long, but PyUnicode_FromOrdinal takes an int. (why doesn't gcc issue a truncation warning in this case?) ........ r65340 | amaury.forgeotdarc | 2008-07-31 23:35:03 +0200 (jeu., 31 juil. 2008) | 2 lines Remove a dummy test that was checked in by mistake ........ r65342 | amaury.forgeotdarc | 2008-08-01 01:39:05 +0200 (ven., 01 août 2008) | 8 lines Correct a crash when two successive unicode allocations fail with a MemoryError: the freelist contained half-initialized objects with freed pointers. The comment /* XXX UNREF/NEWREF interface should be more symmetrical */ was copied from tupleobject.c, and appears in some other places. I sign the petition. ........
This commit is contained in:
parent
e2e36ba696
commit
7888d0803d
|
@ -216,6 +216,7 @@ class BuiltinTest(unittest.TestCase):
|
|||
self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
|
||||
self.assertRaises(ValueError, chr, -1)
|
||||
self.assertRaises(ValueError, chr, 0x00110000)
|
||||
self.assertRaises((OverflowError, ValueError), chr, 2**32)
|
||||
|
||||
def test_cmp(self):
|
||||
self.assertEqual(cmp(-1, 1), -1)
|
||||
|
|
|
@ -12,14 +12,6 @@ from test.support import TESTFN, unlink, run_unittest, captured_output
|
|||
|
||||
class ExceptionTests(unittest.TestCase):
|
||||
|
||||
def test00(self):
|
||||
try:
|
||||
sys.exit(ValueError('aaa'))
|
||||
except SystemExit:
|
||||
pass
|
||||
finally:
|
||||
pass
|
||||
|
||||
def raise_catch(self, exc, excname):
|
||||
try:
|
||||
raise exc("spam")
|
||||
|
|
|
@ -1156,6 +1156,20 @@ class UnicodeTest(
|
|||
self.assertRaises(OverflowError, 't\tt\t'.expandtabs, sys.maxsize)
|
||||
|
||||
|
||||
def test_raiseMemError(self):
|
||||
# Ensure that the freelist contains a consistent object, even
|
||||
# when a string allocation fails with a MemoryError.
|
||||
# This used to crash the interpreter,
|
||||
# or leak references when the number was smaller.
|
||||
try:
|
||||
"a" * (sys.maxsize // 2 - 100)
|
||||
except MemoryError:
|
||||
pass
|
||||
try:
|
||||
"a" * (sys.maxsize // 2 - 100)
|
||||
except MemoryError:
|
||||
pass
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(__name__)
|
||||
|
||||
|
|
|
@ -322,7 +322,7 @@ PyUnicodeObject *_PyUnicode_New(Py_ssize_t length)
|
|||
if ((unicode->length < length) &&
|
||||
unicode_resize(unicode, length) < 0) {
|
||||
PyObject_DEL(unicode->str);
|
||||
goto onError;
|
||||
unicode->str = NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -360,6 +360,8 @@ PyUnicodeObject *_PyUnicode_New(Py_ssize_t length)
|
|||
return unicode;
|
||||
|
||||
onError:
|
||||
/* XXX UNREF/NEWREF interface should be more symmetrical */
|
||||
_Py_DEC_REFTOTAL;
|
||||
_Py_ForgetReference((PyObject *)unicode);
|
||||
PyObject_Del(unicode);
|
||||
return NULL;
|
||||
|
|
|
@ -454,9 +454,9 @@ format_spec defaults to \"\"");
|
|||
static PyObject *
|
||||
builtin_chr(PyObject *self, PyObject *args)
|
||||
{
|
||||
long x;
|
||||
int x;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "l:chr", &x))
|
||||
if (!PyArg_ParseTuple(args, "i:chr", &x))
|
||||
return NULL;
|
||||
|
||||
return PyUnicode_FromOrdinal(x);
|
||||
|
|
Loading…
Reference in New Issue