bpo-43916: select.poll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25750)

This commit is contained in:
Erlend Egeberg Aasland 2021-04-30 15:49:17 +02:00 committed by GitHub
parent 5979e81a21
commit 387397f8a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 13 deletions

View File

@ -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()

View File

@ -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