diff options
author | Ben L <bobsayshilol@live.co.uk> | 2019-04-30 14:20:11 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2019-04-30 08:20:11 -0600 |
commit | 927e42fd52ed7dee859ac85fec9dd6830d769773 (patch) | |
tree | c503ba148f17eb8c431e94bde3d3bef0e66c0d3f /libiberty/cp-demangle.c | |
parent | 5bcc5a3b28d56bff2c70e5f52ce25f2cd7ee055e (diff) | |
download | gcc-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.c | 10 |
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 { |