https://github.com/python/cpython/commit/afd10f0e28476f5ca0eaeac34ebf85dda2cdc6e5
commit: afd10f0e28476f5ca0eaeac34ebf85dda2cdc6e5
branch: main
author: Bhuvansh <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2026-08-01T15:51:56+05:30
summary:
gh-154871: Fix `asyncio.Task.get_context()` crash on uninitialized tasks
(#154898)
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 110cd0936c007c9..ad9b09857f8fd2b 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -2924,6 +2924,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 000000000000000..8f0f1096dfe6347
--- /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 ec6f35f161136c1..41384b388142ccc 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -2786,7 +2786,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]