From dbd05b9edcf760a7001985f89bc760358a3c19d7 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Wed, 20 Aug 2025 10:45:09 +0100 Subject: [PATCH] gdb/python: check return value of PyObject_New in all cases I spotted a few cases where the return value of PyObject_New was not being checked against nullptr, but we were dereferencing the result. All fixed here. The fixed functions can now return NULL, so I checked all the callers, and I believe there will handle a return of NULL correctly. Assuming calls to PyObject_New never fail, there should be no user visible changes after this commit. No tests here as I don't know how we'd go about causing a Python object allocation to fail. Approved-By: Simon Marchi --- gdb/python/py-block.c | 3 +++ gdb/python/py-record.c | 3 +++ gdb/python/py-unwind.c | 2 ++ 3 files changed, 8 insertions(+) diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c index fa7dd192280..66ccad7e873 100644 --- a/gdb/python/py-block.c +++ b/gdb/python/py-block.c @@ -356,6 +356,9 @@ block_to_block_object (const struct block *block, struct objfile *objfile) } result = PyObject_New (block_object, &block_object_type); + if (result == nullptr) + return nullptr; + result->block = block; result->objfile = objfile; diff --git a/gdb/python/py-record.c b/gdb/python/py-record.c index 7e7904b0d3e..89c2e7745e5 100644 --- a/gdb/python/py-record.c +++ b/gdb/python/py-record.c @@ -696,6 +696,9 @@ gdbpy_current_recording (PyObject *self, PyObject *args) Py_RETURN_NONE; ret = PyObject_New (recpy_record_object, &recpy_record_type); + if (ret == nullptr) + return nullptr; + ret->thread = inferior_thread (); ret->method = target_record_method (ret->thread->ptid); diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c index dc078ecb5f7..43125bb67c1 100644 --- a/gdb/python/py-unwind.c +++ b/gdb/python/py-unwind.c @@ -287,6 +287,8 @@ pyuw_create_unwind_info (PyObject *pyo_pending_frame, unwind_info_object *unwind_info = PyObject_New (unwind_info_object, &unwind_info_object_type); + if (unwind_info == nullptr) + return nullptr; unwind_info->frame_id = frame_id; Py_INCREF (pyo_pending_frame); -- 2.47.2