If auto-conversion fails, the Unicode codecs will return NULL.
This is now checked and the error passed on to the caller.
diff --git a/Objects/object.c b/Objects/object.c
index 7f38dff..80a6e85 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -268,10 +268,11 @@
 		if (PyUnicode_Check(res)) {
 			PyObject* str;
 			str = PyUnicode_AsEncodedString(res, NULL, NULL);
-			if (str) {
-				Py_DECREF(res);
+			Py_DECREF(res);
+			if (str)
 				res = str;
-			}
+			else
+				return NULL;
 		}
 		if (!PyString_Check(res)) {
 			PyErr_Format(PyExc_TypeError,
@@ -310,14 +311,15 @@
 	}
 	if (res == NULL)
 		return NULL;
-    if (PyUnicode_Check(res)) {
-        PyObject* str;
-        str = PyUnicode_AsEncodedString(res, NULL, NULL);
-        if (str) {
-            Py_DECREF(res);
-            res = str;
-        }
-    }
+	if (PyUnicode_Check(res)) {
+		PyObject* str;
+		str = PyUnicode_AsEncodedString(res, NULL, NULL);
+		Py_DECREF(res);
+		if (str)
+			res = str;
+		else
+		    	return NULL;
+	}
 	if (!PyString_Check(res)) {
 		PyErr_Format(PyExc_TypeError,
 			     "__str__ returned non-string (type %.200s)",