From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20312 invoked by alias); 20 Mar 2013 13:33:45 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 20282 invoked by uid 89); 20 Mar 2013 13:33:38 -0000 X-Spam-SWARE-Status: No, score=-7.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.1 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Wed, 20 Mar 2013 13:33:31 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r2KDXUwJ030603 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 20 Mar 2013 09:33:30 -0400 Received: from localhost.localdomain (ovpn-116-94.ams2.redhat.com [10.36.116.94]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r2KDXT53015425 for ; Wed, 20 Mar 2013 09:33:30 -0400 Message-ID: <5149BAA9.8020902@redhat.com> Date: Wed, 20 Mar 2013 14:35:00 -0000 From: Phil Muldoon MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: [patch][python] Fix some unguarded GDB calls. Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-SW-Source: 2013-03/txt/msg00734.txt.bz2 This patches adds some GDB exception handling and Python exception conversions for some existing code. Cheers, Phil 2013-03-20 Phil Muldoon * python/py-utils.c (get_addr_from_python): Use exception handler for value_as_address. * python/py-cmd.c (gdbpy_parse_command_name): Use exception handler for lookup_cmd_1.. * python/python.c (execute_gdb_command): Move bpstat_do_actions into exception handler. -- diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c index 161b4bc..73897d0 100644 --- a/gdb/python/py-cmd.c +++ b/gdb/python/py-cmd.c @@ -323,6 +323,7 @@ gdbpy_parse_command_name (const char *name, char *prefix_text; const char *prefix_text2; char *result; + volatile struct gdb_exception except; /* Skip trailing whitespace. */ for (i = len - 1; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i) @@ -358,7 +359,17 @@ gdbpy_parse_command_name (const char *name, prefix_text[i + 1] = '\0'; prefix_text2 = prefix_text; - elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1); + + TRY_CATCH (except, RETURN_MASK_ALL) + { + elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1); + } + if (except.reason < 0) + { + gdbpy_convert_exception (except); + return NULL; + } + if (!elt || elt == (struct cmd_list_element *) -1) { PyErr_Format (PyExc_RuntimeError, _("Could not find command prefix %s."), diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c index b280c8c..65a2921 100644 --- a/gdb/python/py-utils.c +++ b/gdb/python/py-utils.c @@ -299,7 +299,19 @@ int get_addr_from_python (PyObject *obj, CORE_ADDR *addr) { if (gdbpy_is_value_object (obj)) - *addr = value_as_address (value_object_to_value (obj)); + { + volatile struct gdb_exception except; + + TRY_CATCH (except, RETURN_MASK_ALL) + { + *addr = value_as_address (value_object_to_value (obj)); + } + if (except.reason < 0) + { + gdbpy_convert_exception (except); + return 0; + } + } else { PyObject *num = PyNumber_Long (obj); diff --git a/gdb/python/python.c b/gdb/python/python.c index 4a7cb28..e44cb00 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -555,12 +555,12 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw) } do_cleanups (cleanup); + + /* Do any commands attached to breakpoint we stopped at. */ + bpstat_do_actions (); } GDB_PY_HANDLE_EXCEPTION (except); - /* Do any commands attached to breakpoint we stopped at. */ - bpstat_do_actions (); - if (result) { PyObject *r = PyString_FromString (result);