Issue #6697: use %U format instead of _PyUnicode_AsString(), because
_PyUnicode_AsString() was not checked for error (NULL).
The unicode string is no more truncated to 200 or 400 *bytes*.
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index 16851a9..35fc32d 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -295,9 +295,9 @@
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;
}
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index be4b6f8..7fd4cc8 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1295,10 +1295,15 @@
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;
}
}