From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30919 invoked by alias); 24 Jul 2009 16:52:02 -0000 Received: (qmail 30909 invoked by uid 22791); 24 Jul 2009 16:52:01 -0000 X-SWARE-Spam-Status: No, hits=-0.6 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_41,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 24 Jul 2009 16:51:52 +0000 Received: from wpaz9.hot.corp.google.com (wpaz9.hot.corp.google.com [172.24.198.73]) by smtp-out.google.com with ESMTP id n6OGpn9D003676 for ; Fri, 24 Jul 2009 17:51:49 +0100 Received: from localhost (ppluzhnikov.mtv.corp.google.com [172.18.118.92]) by wpaz9.hot.corp.google.com with ESMTP id n6OGpku3027521; Fri, 24 Jul 2009 09:51:46 -0700 Received: by localhost (Postfix, from userid 74925) id 1E87476BC0; Fri, 24 Jul 2009 09:51:46 -0700 (PDT) To: gdb-patches@sourceware.org Cc: ppluzhnikov@google.com Subject: [patch] Fix crash in read_dbx_symtab Message-Id: <20090724165146.1E87476BC0@localhost> Date: Fri, 24 Jul 2009 17:25:00 -0000 From: ppluzhnikov@google.com (Paul Pluzhnikov) 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: 2009-07/txt/msg00600.txt.bz2 Greetings, This checkin: 2009-03-31 Daniel Jacobowitz Keith Seitz Jan Kratochvil PR gdb/6817 * Makefile.in (dbxread.o): Update. * dbxread.c (read_dbx_symtab): Use cp_canonicalize_string. ... Introduced an alloca in a loop for each symbol, which causes GDB to run out of stack and crash when stack is limited (e.g. 'ulimit -s' == 8192) and the executable has a lot of long STABs (C++ N_LSYMs in my test case). Here is a proposed fix. Thanks, -- Paul Pluzhnikov 2009-07-24 Paul Pluzhnikov PR gdb/6817 * dbxread.c (read_dbx_symtab): Reduce stack use. Index: dbxread.c =================================================================== RCS file: /cvs/src/src/gdb/dbxread.c,v retrieving revision 1.104 diff -u -p -u -r1.104 dbxread.c --- dbxread.c 29 Jun 2009 16:48:15 -0000 1.104 +++ dbxread.c 24 Jul 2009 16:39:03 -0000 @@ -1689,7 +1689,7 @@ pos %d"), sym_name = NULL; /* pacify "gcc -Werror" */ if (psymtab_language == language_cplus) { - char *new_name, *name = alloca (p - namestring + 1); + char *new_name, *name = xmalloc (p - namestring + 1); memcpy (name, namestring, p - namestring); name[p - namestring] = '\0'; new_name = cp_canonicalize_string (name); @@ -1700,6 +1700,7 @@ pos %d"), &objfile->objfile_obstack); xfree (new_name); } + xfree (name); } if (sym_len == 0)