mirror of https://github.com/python/cpython
Issue #21951: Fixed a crash in Tkinter on AIX when called Tcl command with
empty string or tuple argument. On some platforms Tcl memory allocator returns NULL when allocating zero-sized block of memory.
This commit is contained in:
commit
d5fd6188e2
|
@ -418,7 +418,6 @@ class TclTest(unittest.TestCase):
|
|||
self.assertEqual(passValue(['a', ['b', 'c']]),
|
||||
('a', ('b', 'c')) if self.wantobjects else 'a {b c}')
|
||||
|
||||
@unittest.skipIf(sys.platform.startswith("aix"), 'Issue #21951: crashes on AIX')
|
||||
def test_user_command(self):
|
||||
result = None
|
||||
def testfunc(arg):
|
||||
|
@ -446,9 +445,11 @@ class TclTest(unittest.TestCase):
|
|||
check('string')
|
||||
check('string\xbd')
|
||||
check('string\u20ac')
|
||||
check('')
|
||||
check(b'string', 'string')
|
||||
check(b'string\xe2\x82\xac', 'string\xe2\x82\xac')
|
||||
check(b'string\xbd', 'string\xbd')
|
||||
check(b'', '')
|
||||
check('str\x00ing')
|
||||
check('str\x00ing\xbd')
|
||||
check('str\x00ing\u20ac')
|
||||
|
|
|
@ -132,6 +132,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #21951: Fixed a crash in Tkinter on AIX when called Tcl command with
|
||||
empty string or tuple argument.
|
||||
|
||||
- Issue #21951: Tkinter now most likely raises MemoryError instead of crash
|
||||
if the memory allocation fails.
|
||||
|
||||
|
|
|
@ -906,6 +906,8 @@ AsObj(PyObject *value)
|
|||
Py_ssize_t size, i;
|
||||
|
||||
size = PySequence_Fast_GET_SIZE(value);
|
||||
if (size == 0)
|
||||
return Tcl_NewListObj(0, NULL);
|
||||
if (!CHECK_SIZE(size, sizeof(Tcl_Obj *))) {
|
||||
PyErr_SetString(PyExc_OverflowError,
|
||||
PyTuple_Check(value) ? "tuple is too long" :
|
||||
|
@ -936,6 +938,8 @@ AsObj(PyObject *value)
|
|||
|
||||
inbuf = PyUnicode_DATA(value);
|
||||
size = PyUnicode_GET_LENGTH(value);
|
||||
if (size == 0)
|
||||
return Tcl_NewUnicodeObj((const void *)"", 0);
|
||||
if (!CHECK_SIZE(size, sizeof(Tcl_UniChar))) {
|
||||
PyErr_SetString(PyExc_OverflowError, "string is too long");
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue