This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Demangler patch



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);



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]