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;
 			}
 		}