]> granicus.if.org Git - python/commitdiff
Issue #6697: use %U format instead of _PyUnicode_AsString(), because
authorVictor Stinner <victor.stinner@haypocalc.com>
Fri, 12 Mar 2010 17:00:41 +0000 (17:00 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Fri, 12 Mar 2010 17:00:41 +0000 (17:00 +0000)
_PyUnicode_AsString() was not checked for error (NULL).

The unicode string is no more truncated to 200 or 400 *bytes*.

Modules/_hashopenssl.c
Modules/zipimport.c
Objects/funcobject.c
Objects/typeobject.c
Python/ceval.c
Python/import.c

index 26ed148cd839ffad8cef5a16475cf4ce5f5742c5..887de555d4ea202166ad4398d5fd4cf29648d5bf 100644 (file)
@@ -294,10 +294,7 @@ static PyGetSetDef EVP_getseters[] = {
 static PyObject *
 EVP_repr(EVPobject *self)
 {
-    char buf[100];
-    PyOS_snprintf(buf, sizeof(buf), "<%s HASH object @ %p>",
-            _PyUnicode_AsString(self->name), self);
-    return PyUnicode_FromString(buf);
+    return PyUnicode_FromFormat("<%U HASH object @ %p>", self->name, self);
 }
 
 #if HASH_OBJ_CONSTRUCTOR
index 770f18f69d9499d9682953bb968d4784e1e0eba7..fed3e99339e3477c1e6621d879fab81c496ff6d7 100644 (file)
@@ -321,15 +321,12 @@ zipimporter_load_module(PyObject *obj, PyObject *args)
                /* add __path__ to the module *before* the code gets
                   executed */
                PyObject *pkgpath, *fullpath;
-               char *prefix = _PyUnicode_AsString(self->prefix);
                char *subname = get_subname(fullname);
                int err;
 
-               fullpath = PyUnicode_FromFormat("%s%c%s%s",
-                                       _PyUnicode_AsString(self->archive),
-                                       SEP,
-                                       prefix ? prefix : "",
-                                       subname);
+               fullpath = PyUnicode_FromFormat("%U%c%U%s",
+                                       self->archive, SEP,
+                                       self->prefix, subname);
                if (fullpath == NULL)
                        goto error;
 
index 16851a942d5d4c23785d1febbe387b65a17ccff8..35fc32d659c39fcf204bc7282292bdaf0882d662 100644 (file)
@@ -295,9 +295,9 @@ func_set_code(PyFunctionObject *op, PyObject *value)
                    PyTuple_GET_SIZE(op->func_closure));
        if (nclosure != nfree) {
                PyErr_Format(PyExc_ValueError,
-                            "%s() requires a code object with %zd free vars,"
+                            "%U() requires a code object with %zd free vars,"
                             " not %zd",
-                            _PyUnicode_AsString(op->func_name),
+                            op->func_name,
                             nclosure, nfree);
                return -1;
        }
index be4b6f861ef7729675af771de9fed0ee5ec06771..7fd4cc85e8f57936043914f7f25cf74dba075620 100644 (file)
@@ -1295,10 +1295,15 @@ check_duplicates(PyObject *list)
                for (j = i + 1; j < n; j++) {
                        if (PyList_GET_ITEM(list, j) == o) {
                                o = class_name(o);
-                               PyErr_Format(PyExc_TypeError,
-                                            "duplicate base class %.400s",
-                                            o ? _PyUnicode_AsString(o) : "?");
-                               Py_XDECREF(o);
+                               if (o != NULL) {
+                                       PyErr_Format(PyExc_TypeError,
+                                                    "duplicate base class %U",
+                                                    o);
+                                       Py_DECREF(o);
+                               } else {
+                                       PyErr_SetString(PyExc_TypeError,
+                                                    "duplicate base class");
+                               }
                                return -1;
                        }
                }
index 47c53cfa040af3317d6d621c50539cfbcfb44bcd..4e9f77be8ac321324d33eee62aca2523cf2ffaa3 100644 (file)
@@ -3989,10 +3989,10 @@ update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
                if (PyDict_GetItem(kwdict, key) != NULL) {
                        PyErr_Format(PyExc_TypeError,
                                     "%.200s%s got multiple values "
-                                    "for keyword argument '%.200s'",
+                                    "for keyword argument '%U'",
                                     PyEval_GetFuncName(func),
                                     PyEval_GetFuncDesc(func),
-                                    _PyUnicode_AsString(key));
+                                    key);
                        Py_DECREF(key);
                        Py_DECREF(value);
                        Py_DECREF(kwdict);
index 8a948b98f8da2b7a2423212fd9fc9571bfd551e2..036d17e1be940693ad4f60d84a934d65dc1dc692 100644 (file)
@@ -2691,8 +2691,8 @@ PyImport_ReloadModule(PyObject *m)
                parent = PyDict_GetItem(modules, parentname);
                if (parent == NULL) {
                        PyErr_Format(PyExc_ImportError,
-                           "reload(): parent %.200s not in sys.modules",
-                            _PyUnicode_AsString(parentname));
+                           "reload(): parent %U not in sys.modules",
+                            parentname);
                        Py_DECREF(parentname);
                        imp_modules_reloading_clear();
                        return NULL;