diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 06ff39a2656..70fc973a627 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,9 @@ +2019-04-29 Ben L + + * cp-demangle.c (d_expression_1): Don't peek ahead unless the current + char is valid. + * testsuite/demangle-expected: Add testcase. + 2019-04-10 Nick Clifton PR 89394 diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 779b4e763a0..fcc2a209857 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -3359,7 +3359,7 @@ d_expression_1 (struct d_info *di) d_advance (di, 2); if (peek == 't') type = cplus_demangle_type (di); - if (!d_peek_next_char (di)) + if (!d_peek_char (di) || !d_peek_next_char (di)) return NULL; return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST, type, d_exprlist (di, 'E')); diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index 3723b7a90f1..328d51a84e9 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -68,6 +68,10 @@ _$_H1R _Q8ccQ4M2e. _Q8ccQ4M2e. +# Could crash + +_ZmmAtl +_ZmmAtl # # demangler/80513 Test for bogus characters after __thunk_