diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2013-09-23 20:20:07 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2013-09-23 20:20:07 (GMT) |
commit | 369606df2f9235e8e9bce1feabf1ac48c889f8d5 (patch) | |
tree | 14947a537f0f6f04f94f9673398d3f1d7a6b024a | |
parent | 587b30571d8dff63f602ac303659988d7c2ddea3 (diff) | |
download | cpython-369606df2f9235e8e9bce1feabf1ac48c889f8d5.zip cpython-369606df2f9235e8e9bce1feabf1ac48c889f8d5.tar.gz cpython-369606df2f9235e8e9bce1feabf1ac48c889f8d5.tar.bz2 |
Issue #19028: Fixed tkinter.Tkapp.merge() for non-string arguments.
-rw-r--r-- | Lib/test/test_tcl.py | 31 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/_tkinter.c | 15 |
3 files changed, 36 insertions, 12 deletions
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py index cf717d8..2cdac2b 100644 --- a/Lib/test/test_tcl.py +++ b/Lib/test/test_tcl.py @@ -254,6 +254,37 @@ class TclTest(unittest.TestCase): for arg, res in testcases: self.assertEqual(split(arg), res, msg=arg) + def test_merge(self): + with support.check_warnings(('merge is deprecated', + DeprecationWarning)): + merge = self.interp.tk.merge + call = self.interp.tk.call + testcases = [ + ((), ''), + (('a',), 'a'), + ((2,), '2'), + (('',), '{}'), + ('{', '\\{'), + (('a', 'b', 'c'), 'a b c'), + ((' ', '\t', '\r', '\n'), '{ } {\t} {\r} {\n}'), + (('a', ' ', 'c'), 'a { } c'), + (('a', '€'), 'a €'), + (('a', '\U000104a2'), 'a \U000104a2'), + (('a', b'\xe2\x82\xac'), 'a €'), + (('a', ('b', 'c')), 'a {b c}'), + (('a', 2), 'a 2'), + (('a', 3.4), 'a 3.4'), + (('a', (2, 3.4)), 'a {2 3.4}'), + ((), ''), + ((call('list', 1, '2', (3.4,)),), '{1 2 3.4}'), + ((call('dict', 'create', 12, '\u20ac', b'\xe2\x82\xac', (3.4,)),), + '{12 € € 3.4}'), + ] + for args, res in testcases: + self.assertEqual(merge(*args), res, msg=args) + self.assertRaises(UnicodeDecodeError, merge, b'\x80') + self.assertRaises(UnicodeEncodeError, merge, '\udc80') + class BigmemTclTest(unittest.TestCase): @@ -68,6 +68,8 @@ Core and Builtins Library ------- +- Issue #19028: Fixed tkinter.Tkapp.merge() for non-string arguments. + - Issue #3015: Fixed tkinter with wantobject=False. Any Tcl command call returned empty string. diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 1350ff5..ecad541 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -331,17 +331,8 @@ AsString(PyObject *value, PyObject *tmp) { if (PyBytes_Check(value)) return PyBytes_AsString(value); - else if (PyUnicode_Check(value)) { - PyObject *v = PyUnicode_AsUTF8String(value); - if (v == NULL) - return NULL; - if (PyList_Append(tmp, v) != 0) { - Py_DECREF(v); - return NULL; - } - Py_DECREF(v); - return PyBytes_AsString(v); - } + else if (PyUnicode_Check(value)) + return PyUnicode_AsUTF8(value); else { PyObject *v = PyObject_Str(value); if (v == NULL) @@ -351,7 +342,7 @@ AsString(PyObject *value, PyObject *tmp) return NULL; } Py_DECREF(v); - return PyBytes_AsString(v); + return PyUnicode_AsUTF8(v); } } |