Should check that PyObject_Str() really returned a string!
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 5e6a5a5..dffc8e0 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -900,6 +900,11 @@
 				temp = PyObject_Str(v);
 				if (temp == NULL)
 					goto error;
+				if (!PyString_Check(temp)) {
+					PyErr_SetString(PyExc_TypeError,
+					  "%s argument has non-string str()");
+					goto error;
+				}
 				buf = PyString_AsString(temp);
 				len = PyString_Size(temp);
 				if (prec >= 0 && len > prec)