OSDN Git Service

* cp-demangle.c (cplus_demangle_type): Check for invalid type
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Jan 2010 04:05:32 +0000 (04:05 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Jan 2010 04:05:32 +0000 (04:05 +0000)
after "DF".
* testsuite/demangle-expected: Add test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156226 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/cp-demangle.c
libiberty/testsuite/demangle-expected

index 1e2fbff..fcbef26 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-25  Ian Lance Taylor  <iant@google.com>
+
+       * cp-demangle.c (cplus_demangle_type): Check for invalid type
+       after "DF".
+       * testsuite/demangle-expected: Add test.
+
 2010-01-20  Jason Merrill  <jason@redhat.com>
 
        PR c++/42338
        with other than 1 operand.
        (d_print_comp): Handle function parameters.  Fix bug with
        function used in type of function.
-       * testsuite/demangle-expected: Upate tests.
+       * testsuite/demangle-expected: Update tests.
 
 2009-02-21  Mark Mitchell  <mark@codesourcery.com>
 
index f28e163..2f4d0cc 100644 (file)
@@ -1,5 +1,5 @@
 /* Demangler for g++ V3 ABI.
-   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
    Written by Ian Lance Taylor <ian@wasabisystems.com>.
 
@@ -2193,6 +2193,8 @@ cplus_demangle_type (struct d_info *di)
            /* For demangling we don't care about the bits.  */
            d_number (di);
          ret->u.s_fixed.length = cplus_demangle_type (di);
+         if (ret->u.s_fixed.length == NULL)
+           return NULL;
          d_number (di);
          peek = d_next_char (di);
          ret->u.s_fixed.sat = (peek == 's');
index c201a98..eaa7ca9 100644 (file)
@@ -4019,5 +4019,8 @@ prot.lock.update
 --format=gnat
 prot__lock__update_E6s
 prot.lock.update
-
-
+#
+# Used to crash the demangler.
+--format=gnu-v3
+DFA
+DFA