binutils-gdb/gdb/python
Matthieu Longo dafd73bcda gdb/python: fix memory leak in gdb_py_tp_name
The current implementation of gdb_py_tp_name() leaks a reference to the
object returned by PyType_GetFullyQualifiedName() for Python >= 3.13, and
PyType_GetQualName() for Python >= 3.11.

Managing the strong reference on the returned PyObject* with a gdbpy_ref<>
fixes the reference count, but also causes the temporary object to be
deallocated on function exit. As a consequence, the 'const char *' returned
by PyUnicode_AsUTF8AndSize() becomes dangling and can no longer safely be
returned.

The proposed approach consists in changing gdb_py_tp_name() to return a
std::string, and forcing a copy of the 'const char *' value, statically
or dynamically allocated, stored in a temporary or non-temporary PyObject,
depending on the version of Python it was compiled with.
An unfortunate side effect of this fix is that every call sites where the
tp_name is printed, must now use `.c_str()' because PyErr_Format()
and its siblings cannot handle std::string.

Approved-By: Andrew Burgess <aburgess@redhat.com>
2026-06-04 15:09:54 +01:00
..
lib/gdb gdb/dap: add support for opening core files 2026-04-23 09:58:02 +01:00
py-all-events.def gdb/python: new events.corefile_changed event 2026-04-20 22:15:26 +01:00
py-arch.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-auto-load.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-block.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-bpevent.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-breakpoint.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-cmd.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-color.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-color.h Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-connection.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-continueevent.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-corefile.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-dap.c Rewrite output redirection and logging 2026-02-09 08:15:44 -07:00
py-disasm.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-event-types.def gdb/python: new events.corefile_changed event 2026-04-20 22:15:26 +01:00
py-event.c gdb/python: add accessor helpers for __dict__ in Python extension objects 2026-03-14 13:21:06 +00:00
py-event.h gdb: new setters and getters for __dict__, and attributes 2026-01-29 16:46:14 +00:00
py-events.h gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-evtregistry.c [gdb/python] Remove Py_RETURN_{NONE,TRUE,FALSE,NOTIMPLEMENTED} 2026-05-15 21:38:12 +02:00
py-evts.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-exitedevent.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-finishbreakpoint.c [gdb/python] Use py_{none,notimplemented} more often 2026-05-15 21:38:12 +02:00
py-frame.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-framefilter.c [gdb/python] Remove Py_RETURN_{NONE,TRUE,FALSE,NOTIMPLEMENTED} 2026-05-15 21:38:12 +02:00
py-function.c gdb: switch tuple object helpers to Python limited API equivalents 2026-03-04 15:38:11 +00:00
py-gdb-readline.c Python limited API: migrate Py_CompileStringExFlags and PyRun_SimpleString 2026-01-28 09:41:25 +00:00
py-inferior.c [gdb/python] Use py_{none,false} more often 2026-05-15 21:38:12 +02:00
py-infevents.c Return gdbpy_ref<> from frame_info_to_frame_object 2026-02-23 05:29:12 -07:00
py-infthread.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-instruction.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-instruction.h Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-lazy-string.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-linetable.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-membuf.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-mi.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-micmd.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-newobjfileevent.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-obj-type.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-obj-type.h gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-objfile.c [gdb/python] Remove Py_RETURN_{NONE,TRUE,FALSE,NOTIMPLEMENTED} 2026-05-15 21:38:12 +02:00
py-param.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-prettyprint.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-progspace.c [gdb/python] Remove Py_RETURN_{NONE,TRUE,FALSE,NOTIMPLEMENTED} 2026-05-15 21:38:12 +02:00
py-record-btrace.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-record-btrace.h Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-record-full.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-record-full.h Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-record.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-record.h gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-ref.h gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-registers.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-signalevent.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-stopevent.c Return gdbpy_ref<> from value_to_value_object 2026-02-23 05:29:11 -07:00
py-stopevent.h Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-style.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-symbol.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-symtab.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-threadevent.c [gdb/python] Use py_{none,false} more often 2026-05-15 21:38:12 +02:00
py-tui.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-type.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-uiout.h Remove m_applied_style from ui_file 2026-02-09 08:15:29 -07:00
py-unwind.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-utils.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
py-value.c gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
py-varobj.c Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00
py-xmethods.c [gdb/python] Remove Py_RETURN_{NONE,TRUE,FALSE,NOTIMPLEMENTED} 2026-05-15 21:38:12 +02:00
python-config.py Run isort 2024-04-02 11:21:39 -06:00
python-internal.h gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
python-limited-api-missing.h [gdb/python] Fix check-include-guards check in python-limited-api-missing.h 2026-05-15 14:15:22 +02:00
python-traits.h gdb/python: add type traits check for all PyObject sub-classes 2026-05-16 12:44:37 +01:00
python.c gdb/python: fix memory leak in gdb_py_tp_name 2026-06-04 15:09:54 +01:00
python.h Update copyright dates to include 2026 2026-01-05 13:16:46 -07:00