PATCH fixes crashes in demangler

Stu Grossman grossman@cygnus.com
Thu May 13 16:13:00 GMT 1999


cvs server: Diffing .
Index: ChangeLog
===================================================================
RCS file: /cvs/egcs/egcs/libiberty/ChangeLog,v
retrieving revision 1.107
diff -c -p -r1.107 ChangeLog
*** ChangeLog	1999/05/13 01:23:41	1.107
--- ChangeLog	1999/05/13 23:09:43
***************
*** 1,3 ****
--- 1,9 ----
+ Thu May 13 14:26:41 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>
+ 
+ 	* 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.
+ 
  1999-05-13  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
  
  	* tmpnam.c (L_tmpnam): Fix typo.
Index: cplus-dem.c
===================================================================
RCS file: /cvs/egcs/egcs/libiberty/cplus-dem.c,v
retrieving revision 1.46
diff -c -p -r1.46 cplus-dem.c
*** cplus-dem.c	1999/05/13 00:24:18	1.46
--- cplus-dem.c	1999/05/13 23:09:43
*************** 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);


More information about the Gcc-patches mailing list