Fix two Python calls that don't check for errors

PyModule_AddObject steals a reference on success, but not on error,
which is why we have gdb_pymodule_addobject.  I found one spot still
calling the former, which could in theory leak memory on failure.
This patch fixes this.

In the same function I found an unchecked call to
PyDict_SetItemString.  This patch fixes this as well.

Approved-By: Andrew Burgess <aburgess@redhat.com>
This commit is contained in:
Tom Tromey
2023-06-29 07:10:40 -06:00
parent 0879691698
commit 9dbbe5c948

View File

@@ -1647,11 +1647,15 @@ gdbpy_initialize_disasm ()
gdb_disassembler_module = PyModule_Create (&python_disassembler_module_def);
if (gdb_disassembler_module == nullptr)
return -1;
PyModule_AddObject(gdb_module, "disassembler", gdb_disassembler_module);
if (gdb_pymodule_addobject (gdb_module, "disassembler",
gdb_disassembler_module) < 0)
return -1;
/* This is needed so that 'import _gdb.disassembler' will work. */
PyObject *dict = PyImport_GetModuleDict ();
PyDict_SetItemString (dict, "_gdb.disassembler", gdb_disassembler_module);
if (PyDict_SetItemString (dict, "_gdb.disassembler",
gdb_disassembler_module) < 0)
return -1;
for (int i = 0; i <= (int) dis_style_comment_start; ++i)
{