PR python/18089

gdb/ChangeLog:

	PR python/18089
	* python/py-prettyprint.c (print_children): Verify result of children
	iterator.  Provide better error message.
	* python/python-internal..h (gdbpy_print_python_errors_p): Declare.
	* python/python.c (gdbpy_print_python_errors_p): New function.

gdb/testsuite/ChangeLog:

	* gdb.python/py-bad-printers.c: New file.
	* gdb.python/py-bad-printers.py: New file.
	* gdb.python/py-bad-printers.exp: New file.
This commit is contained in:
Doug Evans
2015-04-28 21:53:54 -07:00
parent 5e7cf0784c
commit 69b4374a87
8 changed files with 228 additions and 0 deletions

View File

@@ -554,8 +554,22 @@ print_children (PyObject *printer, const char *hint,
break;
}
if (! PyTuple_Check (item) || PyTuple_Size (item) != 2)
{
PyErr_SetString (PyExc_TypeError,
_("Result of children iterator not a tuple"
" of two elements."));
gdbpy_print_stack ();
Py_DECREF (item);
continue;
}
if (! PyArg_ParseTuple (item, "sO", &name, &py_v))
{
/* The user won't necessarily get a stack trace here, so provide
more context. */
if (gdbpy_print_python_errors_p ())
fprintf_unfiltered (gdb_stderr,
_("Bad result from children iterator.\n"));
gdbpy_print_stack ();
Py_DECREF (item);
continue;