From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31784 invoked by alias); 1 Dec 2014 13:35:29 -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 31773 invoked by uid 89); 1 Dec 2014 13:35:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: usevmg20.ericsson.net Received: from usevmg20.ericsson.net (HELO usevmg20.ericsson.net) (198.24.6.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Mon, 01 Dec 2014 13:35:28 +0000 Received: from EUSAAHC002.ericsson.se (Unknown_Domain [147.117.188.78]) by usevmg20.ericsson.net (Symantec Mail Security) with SMTP id D1.03.03307.2BE1C745; Mon, 1 Dec 2014 08:54:26 +0100 (CET) Received: from [142.133.110.254] (147.117.188.8) by smtps-am.internal.ericsson.com (147.117.188.78) with Microsoft SMTP Server (TLS) id 14.3.195.1; Mon, 1 Dec 2014 08:35:25 -0500 Message-ID: <547C6E9C.1010508@ericsson.com> Date: Mon, 01 Dec 2014 13:35:00 -0000 From: Simon Marchi User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: CC: Subject: Re: [PATCH] Catch exception in value_rtti_indirect_type References: <1411174953-8930-1-git-send-email-simon.marchi@ericsson.com> <54454B51.1070307@ericsson.com> In-Reply-To: <54454B51.1070307@ericsson.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2014-12/txt/msg00011.txt.bz2 On 2014-10-20 01:50 PM, Simon Marchi wrote: > On 2014-09-19 09:02 PM, Simon Marchi wrote: >> In the situation described in bug 17416 [1], an exception thrown in >> value_ind can propagate too far and leave an half-built variable object, >> leading to a wrong state. This patch adds a TRY_CATCH to catch it and >> makes value_rtti_indirect_type return NULL in that case, meaning >> that the type of the pointed object could not be found. >> >> If you want, I can also integrate the test case provided in the bug >> description. I just don't know how to name it without giving it a >> ridiculously long name such as >> mi-var-list-children-with-print-object-on-and-a-null-pointer-to-a-structure-that-contains-a-pointer-to-a-structure.exp. >> >> I tested the change on my machine, Ubuntu 14.10 x86-64. >> >> gdb/Changelog: >> >> * valops.c (value_rtti_indirect_type): Catch exception thrown by >> value_ind. >> >> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=17416 >> --- >> gdb/valops.c | 13 ++++++++++++- >> 1 file changed, 12 insertions(+), 1 deletion(-) >> >> diff --git a/gdb/valops.c b/gdb/valops.c >> index e1decf0..c1a0c86 100644 >> --- a/gdb/valops.c >> +++ b/gdb/valops.c >> @@ -3609,7 +3609,18 @@ value_rtti_indirect_type (struct value *v, int *full, >> if (TYPE_CODE (type) == TYPE_CODE_REF) >> target = coerce_ref (v); >> else if (TYPE_CODE (type) == TYPE_CODE_PTR) >> - target = value_ind (v); >> + { >> + volatile struct gdb_exception except; >> + >> + TRY_CATCH (except, RETURN_MASK_ERROR) >> + { >> + target = value_ind (v); >> + } >> + if (except.error == MEMORY_ERROR) >> + return NULL; >> + else if (except.error != GDB_NO_ERROR) >> + throw_exception (except); >> + } >> else >> return NULL; > > Ping > Ping.