fix crash in frame filters
apply_frame_filter calls ensure_python_env before computing the gdbarch to use. This means that python_gdbarch can be NULL while in Python code, and if a frame filter depends on this somehow (easy to do), gdb will crash. The fix is to compute the gdbarch first. Built and regtested on x86-64 Fedora 18. New test case included. 2014-01-23 Tom Tromey <tromey@redhat.com> PR python/16491: * python/py-framefilter.c (apply_frame_filter): Call ensure_python_env after computing gdbarch. 2014-01-23 Tom Tromey <tromey@redhat.com> PR python/16491: * gdb.python/py-framefilter.py (Reverse_Function.function): Read a string from an inferior frame. * gdb.python/py-framefilter-mi.exp: Update.
This commit is contained in:
parent
17fde6d091
commit
21909fa1c6
5 changed files with 23 additions and 7 deletions
|
@ -1477,18 +1477,18 @@ apply_frame_filter (struct frame_info *frame, int flags,
|
|||
if (!gdb_python_initialized)
|
||||
return PY_BT_NO_FILTERS;
|
||||
|
||||
cleanups = ensure_python_env (gdbarch, current_language);
|
||||
|
||||
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||
{
|
||||
gdbarch = get_frame_arch (frame);
|
||||
}
|
||||
if (except.reason < 0)
|
||||
{
|
||||
gdbpy_convert_exception (except);
|
||||
goto error;
|
||||
/* Let gdb try to print the stack trace. */
|
||||
return PY_BT_NO_FILTERS;
|
||||
}
|
||||
|
||||
cleanups = ensure_python_env (gdbarch, current_language);
|
||||
|
||||
iterable = bootstrap_python_frame_filters (frame, frame_low, frame_high);
|
||||
|
||||
if (iterable == NULL)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue