]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-122332: Fix missing `NULL` check in `asyncio.Task.get_coro` (#122338)
authorPeter Bierma <zintensitydev@gmail.com>
Sat, 27 Jul 2024 06:27:48 +0000 (02:27 -0400)
committerGitHub <noreply@github.com>
Sat, 27 Jul 2024 06:27:48 +0000 (11:57 +0530)
Lib/test/test_asyncio/test_eager_task_factory.py
Misc/NEWS.d/next/Library/2024-07-26-21-21-13.gh-issue-122332.fvw88r.rst [new file with mode: 0644]
Modules/_asynciomodule.c

index 0f8212dbec47be5096988cbacd99dbb2237e4e04..0777f39b57248605964fed372055d3391fa4415a 100644 (file)
@@ -241,6 +241,18 @@ class CEagerTaskFactoryLoopTests(EagerTaskFactoryLoopTests, test_utils.TestCase)
         _, out, err = assert_python_ok("-c", code)
         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:
     def __init__(self, loop, *, task_class, eager):
         self.suspense_count = 0
diff --git a/Misc/NEWS.d/next/Library/2024-07-26-21-21-13.gh-issue-122332.fvw88r.rst b/Misc/NEWS.d/next/Library/2024-07-26-21-21-13.gh-issue-122332.fvw88r.rst
new file mode 100644 (file)
index 0000000..55bb1dc
--- /dev/null
@@ -0,0 +1,2 @@
+Fixed segfault with :meth:`asyncio.Task.get_coro` when using an eager task
+factory.
index 1a223f9bd0cbaeb9a3b238dfb39599f45b245391..873c17cd78709d47d4e2890f1d20965e5dd89aaf 100644 (file)
@@ -2500,7 +2500,11 @@ static PyObject *
 _asyncio_Task_get_coro_impl(TaskObj *self)
 /*[clinic end generated code: output=bcac27c8cc6c8073 input=d2e8606c42a7b403]*/
 {
-    return Py_NewRef(self->task_coro);
+    if (self->task_coro) {
+        return Py_NewRef(self->task_coro);
+    }
+
+    Py_RETURN_NONE;
 }
 
 /*[clinic input]