From fedcf9474e73a8cb209a61f513f46fb062f2cd11 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 12 Nov 2015 11:59:03 +0200 Subject: Issue #22995: Default implementation of __reduce__ and __reduce_ex__ now rejects builtin types with not defined __new__. --- Misc/NEWS | 3 +++ Objects/typeobject.c | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/Misc/NEWS b/Misc/NEWS index 03aac95..e925103 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 2.7.11? 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 @@ reduce_2(PyObject *obj) 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); -- cgit v0.12