gh-122332: Fix missing `NULL` check in `asyncio.Task.get_coro` (#122338)

This commit is contained in:
Peter Bierma 2024-07-27 02:27:48 -04:00 committed by GitHub
parent 863a92f2bc
commit c08696286f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 1 deletions

View File

@ -241,6 +241,18 @@ class CEagerTaskFactoryLoopTests(EagerTaskFactoryLoopTests, test_utils.TestCase)
_, out, err = assert_python_ok("-c", code) _, out, err = assert_python_ok("-c", code)
self.assertFalse(err) self.assertFalse(err)
def test_issue122332(self):
async def coro():
pass
async def run():
task = self.loop.create_task(coro())
await task
self.assertIsNone(task.get_coro())
self.run_coro(run())
class AsyncTaskCounter: class AsyncTaskCounter:
def __init__(self, loop, *, task_class, eager): def __init__(self, loop, *, task_class, eager):
self.suspense_count = 0 self.suspense_count = 0

View File

@ -0,0 +1,2 @@
Fixed segfault with :meth:`asyncio.Task.get_coro` when using an eager task
factory.

View File

@ -2500,9 +2500,13 @@ static PyObject *
_asyncio_Task_get_coro_impl(TaskObj *self) _asyncio_Task_get_coro_impl(TaskObj *self)
/*[clinic end generated code: output=bcac27c8cc6c8073 input=d2e8606c42a7b403]*/ /*[clinic end generated code: output=bcac27c8cc6c8073 input=d2e8606c42a7b403]*/
{ {
if (self->task_coro) {
return Py_NewRef(self->task_coro); return Py_NewRef(self->task_coro);
} }
Py_RETURN_NONE;
}
/*[clinic input] /*[clinic input]
_asyncio.Task.get_context _asyncio.Task.get_context
[clinic start generated code]*/ [clinic start generated code]*/