This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Demangler patch
- To: egcs-patches at egcs dot cygnus dot com
- Subject: Demangler patch
- From: Jeffrey A Law <law at upchuck dot cygnus dot com>
- Date: Mon, 17 May 1999 01:40:32 -0600
- Reply-To: law at cygnus dot com
I've installed this patch from Stu Grossman. In short, it fixes some core
dumps in the demangler.
* cplus-dem.c (demangle_fund_type (near 'I' case)): Don't advance
the *mangled pointer beyond the end of the string. Clean up code to
match prevailing coding style.
Index: cplus-dem.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/libiberty/cplus-dem.c,v
retrieving revision 1.46
diff -c -3 -p -r1.46 cplus-dem.c
*** cplus-dem.c 1999/05/13 00:24:18 1.46
--- cplus-dem.c 1999/05/17 07:42:27
*************** char * realloc ();
*** 51,56 ****
--- 51,58 ----
#include "libiberty.h"
+ #define min(X,Y) (((X) < (Y)) ? (X) : (Y))
+
static const char *mystrstr PARAMS ((const char *, const char *));
static const char *
*************** demangle_fund_type (work, mangled, resul
*** 3373,3386 ****
break;
}
case 'I':
! ++(*mangled);
if (**mangled == '_')
{
int i;
! ++(*mangled);
for (i = 0;
! (i < sizeof (buf) - 1 && **mangled && **mangled != '_');
! ++(*mangled), ++i)
buf[i] = **mangled;
if (**mangled != '_')
{
--- 3375,3388 ----
break;
}
case 'I':
! (*mangled)++;
if (**mangled == '_')
{
int i;
! (*mangled)++;
for (i = 0;
! i < sizeof (buf) - 1 && **mangled && **mangled != '_';
! (*mangled)++, i++)
buf[i] = **mangled;
if (**mangled != '_')
{
*************** demangle_fund_type (work, mangled, resul
*** 3388,3400 ****
break;
}
buf[i] = '\0';
! ++(*mangled);
}
else
{
strncpy (buf, *mangled, 2);
buf[2] = '\0';
! *mangled += 2;
}
sscanf (buf, "%x", &dec);
sprintf (buf, "int%i_t", dec);
--- 3390,3402 ----
break;
}
buf[i] = '\0';
! (*mangled)++;
}
else
{
strncpy (buf, *mangled, 2);
buf[2] = '\0';
! *mangled += min (strlen (*mangled), 2);
}
sscanf (buf, "%x", &dec);
sprintf (buf, "int%i_t", dec);