diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cxa_demangle.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp index 25aa741..8b9dfc9 100644 --- a/src/cxa_demangle.cpp +++ b/src/cxa_demangle.cpp @@ -4978,6 +4978,15 @@ __cxa_demangle(const char *mangled_name, char *buf, size_t *n, int *status) { *status = invalid_args; return nullptr; } + + size_t len = std::strlen(mangled_name); + if (len < 2 || mangled_name[0] != '_' || mangled_name[1] != 'Z') + { + if (status) + *status = invalid_mangled_name; + return nullptr; + } + size_t internal_size = buf != nullptr ? *n : 0; arena<bs> a; Db db(a); @@ -4990,7 +4999,6 @@ __cxa_demangle(const char *mangled_name, char *buf, size_t *n, int *status) { db.fix_forward_references = false; db.try_to_parse_template_args = true; int internal_status = success; - size_t len = std::strlen(mangled_name); demangle(mangled_name, mangled_name + len, db, internal_status); if (internal_status == success && db.fix_forward_references && |