From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14070 invoked by alias); 4 Mar 2011 18:07:36 -0000 Received: (qmail 14049 invoked by uid 22791); 4 Mar 2011 18:07:35 -0000 X-SWARE-Spam-Status: No, hits=-5.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-outbound-2.vmware.com (HELO smtp-outbound-2.vmware.com) (65.115.85.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 04 Mar 2011 18:07:28 +0000 Received: from mailhost3.vmware.com (mailhost3.vmware.com [10.16.27.45]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id 87001A015; Fri, 4 Mar 2011 10:07:27 -0800 (PST) Received: from msnyder-server.eng.vmware.com (promd-2s-dhcp138.eng.vmware.com [10.20.124.138]) by mailhost3.vmware.com (Postfix) with ESMTP id 7D58FCD95B; Fri, 4 Mar 2011 10:07:27 -0800 (PST) Message-ID: <4D712A5F.1040307@vmware.com> Date: Fri, 04 Mar 2011 18:07:00 -0000 From: Michael Snyder User-Agent: Thunderbird 2.0.0.24 (X11/20101201) MIME-Version: 1.0 To: Tristan Gingold CC: Jakub Jelinek , "gdb-patches@sourceware.org" , "gcc-patches@gcc.gnu.org" Subject: Re: libiberty/cplus-dem.c, ada-demangle: plug memory leak. References: <4D70061C.10904@vmware.com> <20110303213008.GY30899@tyan-ft48-01.lab.bos.redhat.com> <4D700F5D.2030109@vmware.com> <807E3430-F4F7-464D-8E8A-527A86BA3D88@adacore.com> In-Reply-To: <807E3430-F4F7-464D-8E8A-527A86BA3D88@adacore.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-03/txt/msg00225.txt.bz2 Tristan Gingold wrote: > On Mar 3, 2011, at 10:59 PM, Michael Snyder wrote: > >> Jakub Jelinek wrote: >>> On Thu, Mar 03, 2011 at 01:20:28PM -0800, Michael Snyder wrote: >>>> 2011-03-03 Michael Snyder >>>> >>>> * libiberty/cplus-dem.c (ada_demangle): Stop memory leak. >>>> Also fix a one line indent problem. >>> No libiberty/ in libiberty/ChangeLog. >>>> @@ -1129,10 +1129,11 @@ ada_demangle (const char *mangled, int o >>>> unknown: >>>> len0 = strlen (mangled); >>>> + xfree (demangled); >>>> demangled = XNEWVEC (char, len0 + 3); >>> xfree isn't ever used in libiberty/*, use either free, or >>> XDELETE/XDELETEVEC. In fact, it seems to be defined only in gdb, >>> making cplus-dem.c dependent on gdb is obviously a wrong thing. >> Thanks for the review. >> >> How's this? > >> + if (demangled != NULL) >> + free (demangled); > > No need to check that demangled is not NULL. Are you sure? There is a path to "goto unknown" from before the call to the alloc function. It might actually be null. Some versions of 'free' don't like that.