Skip to content

Commit 8bcecd3

Browse files
ZeroIntensitymiss-islington
authored andcommitted
pythongh-122332: Fix missing NULL check in asyncio.Task.get_coro (pythonGH-122338)
(cherry picked from commit c086962) Co-authored-by: Peter Bierma <[email protected]>
1 parent d4ca183 commit 8bcecd3

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

Lib/test/test_asyncio/test_eager_task_factory.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,18 @@ class DummyLoop:
246246
_, out, err = assert_python_ok("-c", code)
247247
self.assertFalse(err)
248248

249+
def test_issue122332(self):
250+
async def coro():
251+
pass
252+
253+
async def run():
254+
task = self.loop.create_task(coro())
255+
await task
256+
self.assertIsNone(task.get_coro())
257+
258+
self.run_coro(run())
259+
260+
249261
class AsyncTaskCounter:
250262
def __init__(self, loop, *, task_class, eager):
251263
self.suspense_count = 0
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed segfault with :meth:`asyncio.Task.get_coro` when using an eager task
2+
factory.

Modules/_asynciomodule.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2509,7 +2509,11 @@ static PyObject *
25092509
_asyncio_Task_get_coro_impl(TaskObj *self)
25102510
/*[clinic end generated code: output=bcac27c8cc6c8073 input=d2e8606c42a7b403]*/
25112511
{
2512-
return Py_NewRef(self->task_coro);
2512+
if (self->task_coro) {
2513+
return Py_NewRef(self->task_coro);
2514+
}
2515+
2516+
Py_RETURN_NONE;
25132517
}
25142518

25152519
/*[clinic input]

0 commit comments

Comments
 (0)