Fixes for issue 1752184, ensuring type objects are always created
with a PyUnicode name.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index de31ebf..44cf5f1 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -45,6 +45,7 @@
 {
 	PyHeapTypeObject* et;
 	char *tp_name;
+        PyObject *tmp;
 
 	if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
 		PyErr_Format(PyExc_TypeError,
@@ -62,14 +63,22 @@
 			     type->tp_name, Py_Type(value)->tp_name);
 		return -1;
 	}
-	tp_name = PyUnicode_AsString(value);
-	if (tp_name == NULL)
+
+        /* Check absence of null characters */
+        tmp = PyUnicode_FromStringAndSize("\0", 1);
+        if (tmp == NULL)
 		return -1;
-	if (strlen(tp_name) != (size_t)PyUnicode_GET_SIZE(value)) {
+	if (PyUnicode_Contains(value, tmp) != 0) {
+		Py_DECREF(tmp);
 		PyErr_Format(PyExc_ValueError,
 			     "__name__ must not contain null bytes");
 		return -1;
 	}
+	Py_DECREF(tmp);
+
+	tp_name = PyUnicode_AsString(value);
+	if (tp_name == NULL)
+		return -1;
 
 	et = (PyHeapTypeObject*)type;
 
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 2366b1a..798650d 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -415,7 +415,7 @@
         }
         PyTuple_SET_ITEM(fnames, i, field);
     }
-    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
+    result = PyObject_CallFunction((PyObject*)&PyType_Type, "U(O){sOss}",
                     type, base, "_fields", fnames, "__module__", "_ast");
     Py_DECREF(fnames);
     return (PyTypeObject*)result;
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index d89b610..0ccf489 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -410,7 +410,7 @@
         }
         PyTuple_SET_ITEM(fnames, i, field);
     }
-    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
+    result = PyObject_CallFunction((PyObject*)&PyType_Type, "U(O){sOss}",
                     type, base, "_fields", fnames, "__module__", "_ast");
     Py_DECREF(fnames);
     return (PyTypeObject*)result;
diff --git a/Python/errors.c b/Python/errors.c
index e543506..b45dad4 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -608,7 +608,7 @@
 			goto failure;
 	}
 	/* Create a real new-style class. */
-	result = PyObject_CallFunction((PyObject *)&PyType_Type, "sOO",
+	result = PyObject_CallFunction((PyObject *)&PyType_Type, "UOO",
 				       dot+1, bases, dict);
   failure:
 	Py_XDECREF(bases);