* cplus-dem.c (demangle_signature): Recognize misplaced '_' to
authorFred Fish <fnf@specifix.com>
Mon, 11 May 1992 20:32:03 +0000 (20:32 +0000)
committerFred Fish <fnf@specifix.com>
Mon, 11 May 1992 20:32:03 +0000 (20:32 +0000)
avoid infinite loops while demangling bogus mangled names.
* valprint.c (type_print_base):  Minor fix for GNU style guide
conformance.

gdb/ChangeLog
gdb/cplus-dem.c

index e9983bbbb0a640963d73b0b1fc19f2c09cc5c4cf..6d00d43532796dc9dcf97cd54309aaf8aa102c4a 100644 (file)
@@ -1,3 +1,10 @@
+Mon May 11 13:27:46 1992  Fred Fish  (fnf@cygnus.com)
+
+       * cplus-dem.c (demangle_signature):  Recognize misplaced '_' to
+       avoid infinite loops while demangling bogus mangled names.
+       * valprint.c (type_print_base):  Minor fix for GNU style guide
+       conformance.
+
 Sat May  9 18:02:17 1992  Fred Fish  (fnf at fishpond)
 
        * Makefile.in (VERSION):  Bump to 4.5.3
index d4bb48e916bb0439423cc863766ec74c0056a305..2c4d54bc33787613422963998cf27bad0e184cab 100644 (file)
@@ -481,6 +481,15 @@ demangle_signature (declp, mangled, work)
            success = demangle_template (declp, mangled, work);
            break;
 
+         case '_':
+           /* At the outermost level, we cannot have a return type specified,
+              so if we run into another '_' at this point we are dealing with
+              a mangled name that is either bogus, or has been mangled by
+              some algorithm we don't know how to deal with.  So just
+              reject the entire demangling. */
+           success = 0;
+           break;
+
          default:
 #ifdef GNU_DEMANGLING
            /* Assume we have stumbled onto the first outermost function
@@ -497,7 +506,7 @@ demangle_signature (declp, mangled, work)
            break;
        }
 #ifdef GNU_DEMANGLING
-      if (expect_func)
+      if (success && expect_func)
        {
          func_done = 1;
          success = demangle_args (declp, mangled, work);