From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7822 invoked by alias); 20 Oct 2014 17:50:14 -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 7813 invoked by uid 89); 20 Oct 2014 17:50:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,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, 20 Oct 2014 17:50:12 +0000 Received: from EUSAAHC004.ericsson.se (Unknown_Domain [147.117.188.84]) by usevmg20.ericsson.net (Symantec Mail Security) with SMTP id A5.AA.05330.6C3F4445; Mon, 20 Oct 2014 13:36:38 +0200 (CEST) Received: from [142.133.110.254] (147.117.188.8) by smtps-am.internal.ericsson.com (147.117.188.84) with Microsoft SMTP Server (TLS) id 14.3.174.1; Mon, 20 Oct 2014 13:50:10 -0400 Message-ID: <54454B51.1070307@ericsson.com> Date: Mon, 20 Oct 2014 17:50: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> In-Reply-To: <1411174953-8930-1-git-send-email-simon.marchi@ericsson.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2014-10/txt/msg00517.txt.bz2 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