This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 1/3] fix crash in frame filters
- From: Phil Muldoon <pmuldoon at redhat dot com>
- To: Tom Tromey <tromey at redhat dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Wed, 22 Jan 2014 19:57:59 +0000
- Subject: Re: [PATCH 1/3] fix crash in frame filters
- Authentication-results: sourceware.org; auth=none
- References: <1390406399-26664-1-git-send-email-tromey at redhat dot com> <1390406399-26664-2-git-send-email-tromey at redhat dot com>
- Reply-to: pmuldoon at redhat dot com
On Wed, 22 Jan 2014, Tom Tromey wrote:
> 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-22 Tom Tromey <tromey@redhat.com>
>
> PR python/16491:
> * python/py-framefilter.c (apply_frame_filter): Call
> ensure_python_env after computing gdbarch.
>
> 2014-01-22 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.
These are all fine, and thanks for fixing them. I think they should
proceed into 7.7 too. Especially this one:
> diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c
> index 76ce4e5..c6a29ef 100644
> --- a/gdb/python/py-framefilter.c
> +++ b/gdb/python/py-framefilter.c
> @@ -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);
> +
Ugh ugly. Ssing gdbarch when it is NULL before querying the frame for an
architecture is especially clumsy. :( mea culpa.
Cheers,
Phil