aboutsummaryrefslogtreecommitdiff
path: root/libiberty/cp-demangle.c
diff options
context:
space:
mode:
authorBen L <bobsayshilol@live.co.uk>2019-04-30 14:20:11 +0000
committerJeff Law <law@gcc.gnu.org>2019-04-30 08:20:11 -0600
commit927e42fd52ed7dee859ac85fec9dd6830d769773 (patch)
treec503ba148f17eb8c431e94bde3d3bef0e66c0d3f /libiberty/cp-demangle.c
parent5bcc5a3b28d56bff2c70e5f52ce25f2cd7ee055e (diff)
downloadgcc-927e42fd52ed7dee859ac85fec9dd6830d769773.zip
gcc-927e42fd52ed7dee859ac85fec9dd6830d769773.tar.gz
gcc-927e42fd52ed7dee859ac85fec9dd6830d769773.tar.bz2
cp-demangle.c (d_encoding): Guard against NULL return values from d_right (dc).
* cp-demangle.c (d_encoding): Guard against NULL return values from d_right (dc). * testsuite/demangle-expected: Add testcase. From-SVN: r270694
Diffstat (limited to 'libiberty/cp-demangle.c')
-rw-r--r--libiberty/cp-demangle.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index fcc2a20..f8c4c1d 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -1330,8 +1330,14 @@ d_encoding (struct d_info *di, int top_level)
really apply here; this happens when parsing a class
which is local to a function. */
if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
- while (is_fnqual_component_type (d_right (dc)->type))
- d_right (dc) = d_left (d_right (dc));
+ {
+ while (d_right (dc) != NULL
+ && is_fnqual_component_type (d_right (dc)->type))
+ d_right (dc) = d_left (d_right (dc));
+
+ if (d_right (dc) == NULL)
+ dc = NULL;
+ }
}
else
{