Issue #22995: Default implementation of __reduce__ and __reduce_ex__ now
rejects builtin types with not defined __new__.
diff --git a/Misc/NEWS b/Misc/NEWS
index 03aac95..e925103 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 Core and Builtins
 -----------------
 
+- Issue #22995: Default implementation of __reduce__ and __reduce_ex__ now
+  rejects builtin types with not defined __new__.
+
 - Issue #7267: format(int, 'c') now raises OverflowError when the argument is
   not in range(0, 256).
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index d3e5384..720a84e 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3214,6 +3214,13 @@
     if (cls == NULL)
         return NULL;
 
+    if (PyType_Check(cls) && ((PyTypeObject *)cls)->tp_new == NULL) {
+        PyErr_Format(PyExc_TypeError,
+                     "can't pickle %s objects",
+                     ((PyTypeObject *)cls)->tp_name);
+        return NULL;
+    }
+
     getnewargs = PyObject_GetAttrString(obj, "__getnewargs__");
     if (getnewargs != NULL) {
         args = PyObject_CallObject(getnewargs, NULL);