summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Pilkington <erik.pilkington@gmail.com>2017-08-06 20:46:33 +0000
committerErik Pilkington <erik.pilkington@gmail.com>2017-08-06 20:46:33 +0000
commit1137f968e72317fc7bd7b73e9483023367c8a55b (patch)
treea39a390a41cad128caf54e3488e427e77386c7a6
parentb90082274531c38eb75bb5d30aac876d338004ea (diff)
[demangler] Fix another oss-fuzz bug
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@310226 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--src/cxa_demangle.cpp2
-rw-r--r--test/test_demangle.pass.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp
index 88990a2..0281b50 100644
--- a/src/cxa_demangle.cpp
+++ b/src/cxa_demangle.cpp
@@ -2896,7 +2896,7 @@ parse_new_expr(const char* first, const char* last, Db& db)
return first;
init_list = db.popTrailingNodeArray(init_list_begin);
}
- if (*t != 'E')
+ if (*t != 'E' || db.names.empty())
return first;
auto type = db.names.back();
db.names.pop_back();
diff --git a/test/test_demangle.pass.cpp b/test/test_demangle.pass.cpp
index 3b712f0..18bbbba 100644
--- a/test/test_demangle.pass.cpp
+++ b/test/test_demangle.pass.cpp
@@ -29677,6 +29677,7 @@ const char* invalid_cases[] =
"FSiIJEENT_IoE ",
"ZTVSiIZTVSiIZTVSiIZTVSiINIJEET_T_T_T_T_ ",
"_ZSiIJEvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvttvvvvvvET_v",
+ "Ana_T_E_T_IJEffffffffffffffersfffffrsrsffffffbgE",
};
const unsigned NI = sizeof(invalid_cases) / sizeof(invalid_cases[0]);