diff Modules/_tkinter.c @ 70039:82cfbe2ddfbb 3.1

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().
author Kurt B. Kaiser <kbk@shore.net>
date Wed, 11 May 2011 12:24:17 -0400
parents f197407bdba2
children 65a6a2f8721f
line wrap: on
line diff
--- a/Modules/_tkinter.c	Wed May 11 00:57:29 2011 +0200
+++ b/Modules/_tkinter.c	Wed May 11 12:24:17 2011 -0400
@@ -2023,7 +2023,19 @@
 
     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);
         }