Skip to content

Commit 6b9a5af

Browse files
[3.13] gh-122332: Fix missing NULL check in asyncio.Task.get_coro (GH-122338) (#122344)
gh-122332: Fix missing `NULL` check in `asyncio.Task.get_coro` (GH-122338) (cherry picked from commit c086962) Co-authored-by: Peter Bierma <[email protected]>
1 parent 7b35c50 commit 6b9a5af

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
@@ -241,6 +241,18 @@ class DummyLoop:
241241
_, out, err = assert_python_ok("-c", code)
242242
self.assertFalse(err)
243243

244+
def test_issue122332(self):
245+
async def coro():
246+
pass
247+
248+
async def run():
249+
task = self.loop.create_task(coro())
250+
await task
251+
self.assertIsNone(task.get_coro())
252+
253+
self.run_coro(run())
254+
255+
244256
class AsyncTaskCounter:
245257
def __init__(self, loop, *, task_class, eager):
246258
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
@@ -2450,7 +2450,11 @@ static PyObject *
24502450
_asyncio_Task_get_coro_impl(TaskObj *self)
24512451
/*[clinic end generated code: output=bcac27c8cc6c8073 input=d2e8606c42a7b403]*/
24522452
{
2453-
return Py_NewRef(self->task_coro);
2453+
if (self->task_coro) {
2454+
return Py_NewRef(self->task_coro);
2455+
}
2456+
2457+
Py_RETURN_NONE;
24542458
}
24552459

24562460
/*[clinic input]

0 commit comments

Comments
 (0)