[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]