[3.13] gh-154871: Fix `asyncio.Task.get_context()` crash on uninitialized tasks (GH-154898) (#155021)

Yhg1s <[email protected]> Tue, 04 Aug 2026 05:01:00 -0400 (EDT)
Newsgroups gmane.comp.python.cvs
Message-ID <[email protected]>
https://github.com/python/cpython/commit/22aea1c47727e7ee96f00a8b348b4dd2815d1f0d
commit: 22aea1c47727e7ee96f00a8b348b4dd2815d1f0d
branch: 3.13
author: Miss Islington (bot) <[email protected]>
committer: Yhg1s <[email protected]>
date: 2026-08-04T11:00:46+02:00
summary:

[3.13] gh-154871: Fix `asyncio.Task.get_context()` crash on uninitialized tasks (GH-154898) (#155021)

gh-154871: Fix `asyncio.Task.get_context()` crash on uninitialized tasks (GH-154898)
(cherry picked from commit afd10f0e28476f5ca0eaeac34ebf85dda2cdc6e5)

Co-authored-by: Bhuvansh <[email protected]>

files:
A Misc/NEWS.d/next/Library/2026-07-29-19-48-59.gh-issue-154871.tgZILS.rst
M Lib/test/test_asyncio/test_tasks.py
M Modules/_asynciomodule.c

diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
index 361ad8a7874077..946651104c9c88 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -2848,6 +2848,16 @@ async def coro():
         with self.assertRaises(AttributeError):
             del task._log_destroy_pending
 
+    def test_get_context_uninitialized_segfault(self):
+        # https://github.com/python/cpython/issues/154871
+
+        class UninitializedTask(self.Task):
+            def __init__(self, *args, **kwargs):
+                pass
+
+        task = UninitializedTask()
+        self.assertIsNone(task.get_context())
+
 
 @unittest.skipUnless(hasattr(futures, '_CFuture') and
                      hasattr(tasks, '_CTask'),
diff --git a/Misc/NEWS.d/next/Library/2026-07-29-19-48-59.gh-issue-154871.tgZILS.rst b/Misc/NEWS.d/next/Library/2026-07-29-19-48-59.gh-issue-154871.tgZILS.rst
new file mode 100644
index 00000000000000..8f0f1096dfe634
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-07-29-19-48-59.gh-issue-154871.tgZILS.rst
@@ -0,0 +1,2 @@
+Fixed a crash in :meth:`asyncio.Task.get_context`
+when called on an uninitialized task.
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 857cb06d013ab3..686baa90b119a0 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -2482,7 +2482,11 @@ static PyObject *
 _asyncio_Task_get_context_impl(TaskObj *self)
 /*[clinic end generated code: output=6996f53d3dc01aef input=87c0b209b8fceeeb]*/
 {
-    return Py_NewRef(self->task_context);
+    if (self->task_context) {
+        return Py_NewRef(self->task_context);
+    }
+
+    Py_RETURN_NONE;
 }
 
 /*[clinic input]

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]