]> granicus.if.org Git - python/commitdiff
Ensure that code object names (co_name) are unicode.
authorNeal Norwitz <nnorwitz@gmail.com>
Fri, 24 Aug 2007 23:12:06 +0000 (23:12 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Fri, 24 Aug 2007 23:12:06 +0000 (23:12 +0000)
Verify that they print properly too.

Objects/codeobject.c
Python/compile.c

index 0a7c1415c22f5caab2dd724a082e7e1f56c2db7c..7bd292a8888c6557b58342d1a10e7480c5594186 100644 (file)
@@ -65,6 +65,13 @@ PyCode_New(int argcount, int kwonlyargcount,
                PyErr_BadInternalCall();
                return NULL;
        }
+       if (PyString_Check(name)) {
+               name = PyUnicode_FromString(PyString_AS_STRING(name));
+               if (name == NULL)
+                       return NULL;
+       } else {
+               Py_INCREF(name);
+       }
        intern_strings(names);
        intern_strings(varnames);
        intern_strings(freevars);
@@ -106,6 +113,7 @@ PyCode_New(int argcount, int kwonlyargcount,
                co->co_lnotab = lnotab;
                 co->co_zombieframe = NULL;
        }
+       Py_DECREF(name);
        return co;
 }
 
@@ -288,17 +296,14 @@ code_repr(PyCodeObject *co)
 {
        int lineno = -1;
        char *filename = "???";
-       char *name = "???";
 
        if (co->co_firstlineno != 0)
                lineno = co->co_firstlineno;
        if (co->co_filename && PyString_Check(co->co_filename))
                filename = PyString_AS_STRING(co->co_filename);
-       if (co->co_name && PyString_Check(co->co_name))
-               name = PyString_AS_STRING(co->co_name);
        return PyUnicode_FromFormat(
-                       "<code object %.100s at %p, file \"%.300s\", line %d>",
-                       name, co, filename, lineno);
+                       "<code object %.100U at %p, file \"%.300s\", line %d>",
+                       co->co_name, co, filename, lineno);
 }
 
 static PyObject *
index 8ae40368ec3050537258a0627e5aa5561ef1c399..d2bfe86ff16d3de188b82e36ec9127a846a2b3d4 100644 (file)
@@ -2991,7 +2991,7 @@ compiler_dictcomp(struct compiler *c, expr_ty e)
 {
        static identifier name;
        if (!name) {
-               name = PyString_FromString("<dictcomp>");
+               name = PyUnicode_FromString("<dictcomp>");
                if (!name)
                        return 0;
        }