aboutsummaryrefslogtreecommitdiff
path: root/libiberty
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2010-01-26 04:09:43 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2010-01-26 04:09:43 +0000
commit3309111df1b65aa8e189f0de77b848a47eba31d3 (patch)
tree710b092e801b71fa86203c7f8b1132f22506e9b0 /libiberty
parent3b61a2be9d2d6ac03d4a8e1ca6ceaaee8586ed0c (diff)
cp-demangle.c (cplus_demangle_type): Check for invalid type after "DF".
* cp-demangle.c (cplus_demangle_type): Check for invalid type after "DF". * testsuite/demangle-expected: Add test. From-SVN: r156227
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/ChangeLog6
-rw-r--r--libiberty/cp-demangle.c4
-rw-r--r--libiberty/testsuite/demangle-expected5
3 files changed, 14 insertions, 1 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 07382c7c8a6..3ce5201795f 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -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-21 Release Manager
* GCC 4.4.3 released.
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index b02f9bbf97e..4db82ad5b18 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -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>.
@@ -2149,6 +2149,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');
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index 0c451184fc4..244d8512f2f 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -3910,3 +3910,8 @@ decltype (parm#1+((x())())) A<int>::j<int>(int)
--format=gnu-v3
_Z1gIIidEEDTclL_Z1fEspplfp_Li1EEEDpT_
decltype (f((parm#1+(1))...)) g<int, double>(int, double)
+#
+# Used to crash the demangler.
+--format=gnu-v3
+DFA
+DFA