Issue #1028: Tk returns invalid Unicode null in %A: UnicodeDecodeError.

With Tk < 8.5 _tkinter.c:PythonCmd() raised UnicodeDecodeError, caused IDLE to
exit.  Converted to valid Unicode null in PythonCmd().
This commit is contained in:
Kurt B. Kaiser 2011-05-11 12:24:17 -04:00
parent ba9c6645f7
commit e147806da9
3 changed files with 23 additions and 4 deletions

View file

@ -2023,7 +2023,19 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
for (i = 0; i < (argc - 1); i++) {
PyObject *s = PyUnicode_FromString(argv[i + 1]);
if (!s || PyTuple_SetItem(arg, i, s)) {
if (!s) {
/* Is Tk leaking 0xC080 in %A - a "modified" utf-8 null? */
if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError) &&
!strcmp(argv[i + 1], "\xC0\x80")) {
PyErr_Clear();
/* Convert to "strict" utf-8 null */
s = PyUnicode_FromString("\0");
} else {
Py_DECREF(arg);
return PythonCmd_Error(interp);
}
}
if (PyTuple_SetItem(arg, i, s)) {
Py_DECREF(arg);
return PythonCmd_Error(interp);
}