__cxa_demangle: allow demangling invocation blocks
The block invocation function uses an extension where the prefix is ___Z
as opposed to _Z. This should make the tests pass again.
Disable a negative test which was testing a crasher. The symbol being
demangled is not a valid mangled symbol and will return a nullptr.
Adjust the type info decoding test to be a valid symbol name.
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@286793 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp
index 8b9dfc9..4aeed1b 100644
--- a/src/cxa_demangle.cpp
+++ b/src/cxa_demangle.cpp
@@ -4980,11 +4980,14 @@
}
size_t len = std::strlen(mangled_name);
- if (len < 2 || mangled_name[0] != '_' || mangled_name[1] != 'Z')
+ if (len < 2 || strncmp(mangled_name, "_Z", 2))
{
- if (status)
- *status = invalid_mangled_name;
- return nullptr;
+ if (len < 4 || strncmp(mangled_name, "___Z", 4))
+ {
+ if (status)
+ *status = invalid_mangled_name;
+ return nullptr;
+ }
}
size_t internal_size = buf != nullptr ? *n : 0;