From b74d9d8656816110430e4ed711b88c0e6c835fae Mon Sep 17 00:00:00 2001 From: Erik Pilkington Date: Thu, 13 Jul 2017 19:37:37 +0000 Subject: [demangler] Respect try_to_parse_template_args Fixes an exponential parse found by oss-fuzz. git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@307941 91177308-0d34-0410-b5e6-96231b3b80d8 --- src/cxa_demangle.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp index 355ba66..16aae0c 100644 --- a/src/cxa_demangle.cpp +++ b/src/cxa_demangle.cpp @@ -2364,17 +2364,20 @@ parse_type(const char* first, const char* last, Db& db) first = t; // Parsed a substitution. If the substitution is a // it might be followed by . - t = parse_template_args(first, last, db); - if (t != first) + if (db.try_to_parse_template_args) { - if (db.names.size() < 2) - return first; - auto template_args = db.names.back().move_full(); - db.names.pop_back(); - db.names.back().first += template_args; - // Need to create substitution for - db.subs.push_back(Db::sub_type(1, db.names.back(), db.names.get_allocator())); - first = t; + t = parse_template_args(first, last, db); + if (t != first) + { + if (db.names.size() < 2) + return first; + auto template_args = db.names.back().move_full(); + db.names.pop_back(); + db.names.back().first += template_args; + // Need to create substitution for + db.subs.push_back(Db::sub_type(1, db.names.back(), db.names.get_allocator())); + first = t; + } } } } -- cgit v1.2.3