From 387397f8a4244c983f4568c16a28842e3268fe5d Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Fri, 30 Apr 2021 15:49:17 +0200 Subject: bpo-43916: select.poll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25750) --- Lib/test/test_select.py | 4 ++++ Modules/selectmodule.c | 17 ++++------------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index f63564e..1ef5624 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -87,6 +87,10 @@ class SelectTestCase(unittest.TestCase): a[:] = [F()] * 10 self.assertEqual(select.select([], a, []), ([], a[:5], [])) + def test_disallow_instantiation(self): + tp = type(select.poll()) + self.assertRaises(TypeError, tp) + def tearDownModule(): support.reap_children() diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index f80da58..5038c32 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -728,13 +728,6 @@ newPollObject(PyObject *module) return self; } -static PyObject * -poll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type)); - return NULL; -} - static void poll_dealloc(pollObject *self) { @@ -2275,16 +2268,14 @@ static PyMethodDef poll_methods[] = { static PyType_Slot poll_Type_slots[] = { {Py_tp_dealloc, poll_dealloc}, {Py_tp_methods, poll_methods}, - {Py_tp_new, poll_new}, {0, 0}, }; static PyType_Spec poll_Type_spec = { - "select.poll", - sizeof(pollObject), - 0, - Py_TPFLAGS_DEFAULT, - poll_Type_slots + .name = "select.poll", + .basicsize = sizeof(pollObject), + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .slots = poll_Type_slots, }; #ifdef HAVE_SYS_DEVPOLL_H -- cgit v0.12