aboutsummaryrefslogtreecommitdiff
path: root/libiberty/cp-demangle.c
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@geoffk.org>2007-03-16 01:09:26 +0000
committerGeoffrey Keating <geoffk@geoffk.org>2007-03-16 01:09:26 +0000
commit8d3010701b7ec0c8af9e2f118608d2ba0ba86ed4 (patch)
tree94366e58cd28132a25ec431dba041e72271f68b7 /libiberty/cp-demangle.c
parent27c1e22ef108eafcdb257123f9eb07c3f8ef524d (diff)
downloadgdb-8d3010701b7ec0c8af9e2f118608d2ba0ba86ed4.zip
gdb-8d3010701b7ec0c8af9e2f118608d2ba0ba86ed4.tar.gz
gdb-8d3010701b7ec0c8af9e2f118608d2ba0ba86ed4.tar.bz2
* cp-demangle.c (d_encoding): Exit early on error.
(d_pointer_to_member_type): Exit early if cplus_demangle_type returns NULL. (cplus_demangle_type): Likewise. * testsuite/demangle-expected: New testcase.
Diffstat (limited to 'libiberty/cp-demangle.c')
-rw-r--r--libiberty/cp-demangle.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 1e775d9..5c930c6 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -1067,7 +1067,7 @@ d_encoding (struct d_info *di, int top_level)
}
peek = d_peek_char (di);
- if (peek == '\0' || peek == 'E')
+ if (dc == NULL || peek == '\0' || peek == 'E')
return dc;
return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
d_bare_function_type (di, has_return_type (dc)));
@@ -1780,7 +1780,7 @@ cplus_demangle_type (struct d_info *di)
if (pret == NULL)
return NULL;
*pret = cplus_demangle_type (di);
- if (! d_add_substitution (di, ret))
+ if (! *pret || ! d_add_substitution (di, ret))
return NULL;
return ret;
}
@@ -2135,6 +2135,8 @@ d_pointer_to_member_type (struct d_info *di)
if (pmem == NULL)
return NULL;
*pmem = cplus_demangle_type (di);
+ if (*pmem == NULL)
+ return NULL;
if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
{