From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27679 invoked by alias); 4 Apr 2006 10:34:35 -0000 Received: (qmail 27671 invoked by uid 22791); 4 Apr 2006 10:34:34 -0000 X-Spam-Check-By: sourceware.org Received: from lon-del-03.spheriq.net (HELO lon-del-03.spheriq.net) (195.46.50.99) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 04 Apr 2006 10:34:33 +0000 Received: from lon-out-02.spheriq.net ([195.46.50.130]) by lon-del-03.spheriq.net with ESMTP id k34AYUPU002232 for ; Tue, 4 Apr 2006 10:34:30 GMT Received: from lon-cus-02.spheriq.net (lon-cus-02.spheriq.net [195.46.50.38]) by lon-out-02.spheriq.net with ESMTP id k34AYTrC017520 for ; Tue, 4 Apr 2006 10:34:29 GMT Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by lon-cus-02.spheriq.net with ESMTP id k34AYRNX020420 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=OK) for ; Tue, 4 Apr 2006 10:34:28 GMT Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 57C49DA43 for ; Tue, 4 Apr 2006 10:34:27 +0000 (GMT) Received: from mail1.bri.st.com (mail1.bri.st.com [164.129.8.218]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id F2B6D47336 for ; Tue, 4 Apr 2006 10:38:30 +0000 (GMT) Received: from [164.129.15.13] (terrorhawk.bri.st.com [164.129.15.13]) by mail1.bri.st.com (MOS 3.5.8-GR) with ESMTP id CHK56840 (AUTH stubbsa); Tue, 4 Apr 2006 11:34:23 +0100 (BST) Message-ID: <44324B1E.3070409@st.com> Date: Tue, 04 Apr 2006 10:34:00 -0000 From: Andrew STUBBS User-Agent: Thunderbird 1.5 (Windows/20051201) MIME-Version: 1.0 To: GDB Patches Subject: Re: [PATCH] allow nested sourced commands References: <442BD6F1.8070804@st.com> <44324959.4@st.com> In-Reply-To: <44324959.4@st.com> Content-Type: multipart/mixed; boundary="------------070504090200010605020807" X-O-Spoofed: Not Scanned X-O-General-Status: No X-O-Spam1-Status: Not Scanned X-O-Spam2-Status: Not Scanned X-O-URL-Status: Not Scanned X-O-Virus1-Status: No X-O-Virus2-Status: Not Scanned X-O-Virus3-Status: No X-O-Virus4-Status: No X-O-Virus5-Status: Not Scanned X-O-Image-Status: Not Scanned X-O-Attach-Status: Not Scanned X-SpheriQ-Ver: 4.2.01 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-04/txt/msg00027.txt.bz2 This is a multi-part message in MIME format. --------------070504090200010605020807 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 924 Sorry, I forgot to attach the patch. Andrew Stubbs wrote: > Andrew Stubbs wrote: >> I have discovered a problem in the GDB command line reading code. >> >> command_line_input() uses a static buffer to hold the current command. >> This means that it is not properly re-entrant - commands that contain >> other commands, such as user defined commands, are not handled safely. > > See http://sources.redhat.com/ml/gdb-patches/2006-03/msg00356.html > > The attached patch should fix the problem. > > I tried to fix the problem in command_line_input, but there were too > many ways for the string to leak, so I have opted for the simpler fix, > even though it feels like treating the symptoms, not the problem. > > Anyway, with this patch it no longer attempts to read data that has been > overwritten, so everything works fine. Valgrind reports no problems with > the test case I posted before. > > Andrew Stubbs > --------------070504090200010605020807 Content-Type: text/plain; name="reentrant-commands.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="reentrant-commands.patch" Content-length: 959 2006-04-04 Andrew Stubbs * cli/cli-script.c (struct user_args): Add command field. (arg_cleanup): Free command string. (setup_user_args): Copy the command line before relying on it. Index: src/gdb/cli/cli-script.c =================================================================== --- src.orig/gdb/cli/cli-script.c 2006-04-04 10:53:26.000000000 +0100 +++ src/gdb/cli/cli-script.c 2006-04-04 11:09:33.000000000 +0100 @@ -54,6 +54,7 @@ static int control_level; struct user_args { struct user_args *next; + char *command; struct { char *arg; @@ -483,6 +484,7 @@ arg_cleanup (void *ignore) _("arg_cleanup called with no user args.\n")); user_args = user_args->next; + xfree (oargs->command); xfree (oargs); } @@ -507,6 +509,8 @@ setup_user_args (char *p) if (p == NULL) return old_chain; + user_args->command = p = xstrdup (p); + while (*p) { char *start_arg; --------------070504090200010605020807--