From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4110 invoked by alias); 27 Feb 2011 20:35:55 -0000 Received: (qmail 3931 invoked by uid 22791); 27 Feb 2011 20:35:55 -0000 X-SWARE-Spam-Status: No, hits=-4.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,TW_RG,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-outbound-1.vmware.com (HELO smtp-outbound-1.vmware.com) (65.115.85.69) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 27 Feb 2011 20:35:50 +0000 Received: from mailhost2.vmware.com (mailhost2.vmware.com [10.16.67.167]) by smtp-outbound-1.vmware.com (Postfix) with ESMTP id ED96813029; Sun, 27 Feb 2011 12:35:46 -0800 (PST) Received: from msnyder-server.eng.vmware.com (promd-2s-dhcp138.eng.vmware.com [10.20.124.138]) by mailhost2.vmware.com (Postfix) with ESMTP id E30128ED57; Sun, 27 Feb 2011 12:35:46 -0800 (PST) Message-ID: <4D6AB5A2.3030807@vmware.com> Date: Sun, 27 Feb 2011 20:42:00 -0000 From: Michael Snyder User-Agent: Thunderbird 2.0.0.24 (X11/20101201) MIME-Version: 1.0 To: Jan Kratochvil CC: "gdb-patches@sourceware.org" Subject: Re: [rfa] add_symbol_file_command, avoid memory leak. References: <4D69AAFC.6030607@vmware.com> <20110227171301.GA16297@host1.dyn.jankratochvil.net> In-Reply-To: <20110227171301.GA16297@host1.dyn.jankratochvil.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes 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 X-SW-Source: 2011-02/txt/msg00838.txt.bz2 Jan Kratochvil wrote: > On Sun, 27 Feb 2011 02:38:04 +0100, Michael Snyder wrote: >> This looks straightforward, but I'd appreciate review. >> I don't really understand why sect_opts never gets freed? > > It is a bug, sect_opts should be freed. It is last time used by the lines: > char *val = sect_opts[i].value; > char *sec = sect_opts[i].name; > > The strings in sect_opts[i].name are last time used there by: > symbol_file_add (filename, from_tty ? SYMFILE_VERBOSE : 0, > section_addrs, flags); > > This is also the reason why the NAMEs do not have strdup() and they get safely > freed through make_cleanup_freeargv there. > > >> --- symfile.c 26 Feb 2011 02:07:09 -0000 1.307 >> +++ symfile.c 27 Feb 2011 01:35:32 -0000 >> @@ -2169,15 +2169,15 @@ add_symbol_file_command (char *args, int >> size_t num_sect_opts = 0; >> struct cleanup *my_cleanups = make_cleanup (null_cleanup, NULL); >> >> + if (args == NULL) >> + error (_("add-symbol-file takes a file name and an address")); >> + >> num_sect_opts = 16; >> sect_opts = (struct sect_opt *) xmalloc (num_sect_opts >> * sizeof (struct sect_opt)); >> >> dont_repeat (); >> >> - if (args == NULL) >> - error (_("add-symbol-file takes a file name and an address")); >> - >> argv = gdb_buildargv (args); >> make_cleanup_freeargv (argv); >> > > While a nitpick it is a regression, that dont_repeat should be called even in > the case of that error. No, it's a fix. I moved the error before dont_repeat.