8000 [3.12] gh-122332: Fix missing `NULL` check in `asyncio.Task.get_coro`… · python/cpython@102dc44 · GitHub
[go: up one dir, main page]

Skip to content

Commit 102dc44

Browse files
[3.12] gh-122332: Fix missing NULL check in asyncio.Task.get_coro (GH-122338) (#122345)
gh-122332: Fix missing `NULL` check in `asyncio.Task.get_coro` (GH-122338) (cherry picked from commit c086962) Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
1 parent d4ca183 commit 102dc44

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)
0