diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index f528bb4e73e..104f0e8b20c 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,5 +1,8 @@ 2019-04-30 Ben L + * d-demangle.c (dlang_parse_tuple): Correctly handle error result. + * testsuite/d-demangle-expected: Add testcase. + * d-demangle.c (dlang_parse_structlit): Correctly handle error result. * testsuite/d-demangle-expected: Add testcase. diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 5590417c205..e98118e66d2 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -1503,6 +1503,9 @@ dlang_parse_tuple (string *decl, const char *mangled) while (elements--) { mangled = dlang_type (decl, mangled); + if (mangled == NULL) + return NULL; + if (elements != 0) string_append (decl, ", "); } diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index 0a5f9da8091..44a8d3b0793 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -1318,3 +1318,7 @@ _D5__T2fnVmA1A1A911111111D --format=dlang _D7__T2fnVlS8S588888888888S6S5 _D7__T2fnVlS8S588888888888S6S5 +# Could crash +--format=dlang +_D1_B699999999961* +_D1_B699999999961*