2011-10-27 Phil Muldoon <pmuldoon@redhat.com>

PR python/13331

	* python/py-function.c (fnpy_call): Check 'args' is not NULL.
	(convert_values_to_python): Return on Python tuple allocation
	failure.  Return NULL on value conversion error.
This commit is contained in:
Phil Muldoon
2011-10-27 10:29:58 +00:00
parent c28a9f4951
commit f77b9a5df0
2 changed files with 32 additions and 10 deletions

View File

@ -1,3 +1,11 @@
2011-10-27 Phil Muldoon <pmuldoon@redhat.com>
PR python/13331
* python/py-function.c (fnpy_call): Check 'args' is not NULL.
(convert_values_to_python): Return on Python tuple allocation
failure. Return NULL on value conversion error.
2011-10-27 Phil Muldoon <pmuldoon@redhat.com>
* python/py-breakpoint.c (bppy_set_enabled): Use TRY_CATCH.

View File

@ -39,13 +39,16 @@ convert_values_to_python (int argc, struct value **argv)
int i;
PyObject *result = PyTuple_New (argc);
if (! result)
return NULL;
for (i = 0; i < argc; ++i)
{
PyObject *elt = value_to_value_object (argv[i]);
if (! elt)
{
Py_DECREF (result);
error (_("Could not convert value to Python object."));
return NULL;
}
PyTuple_SetItem (result, i, elt);
}
@ -59,13 +62,23 @@ fnpy_call (struct gdbarch *gdbarch, const struct language_defn *language,
void *cookie, int argc, struct value **argv)
{
struct value *value = NULL;
PyObject *result, *callable, *args;
/* 'result' must be set to NULL, this initially indicates whether
the function was called, or not. */
PyObject *result = NULL;
PyObject *callable, *args;
struct cleanup *cleanup;
cleanup = ensure_python_env (gdbarch, language);
args = convert_values_to_python (argc, argv);
/* convert_values_to_python can return NULL on error. If we
encounter this, do not call the function, but allow the Python ->
error code conversion below to deal with the Python exception.
Note, that this is different if the function simply does not
have arguments. */
if (args)
{
callable = PyObject_GetAttrString ((PyObject *) cookie, "invoke");
if (! callable)
{
@ -76,6 +89,7 @@ fnpy_call (struct gdbarch *gdbarch, const struct language_defn *language,
result = PyObject_Call (callable, args, NULL);
Py_DECREF (callable);
Py_DECREF (args);
}
if (!result)
{