diff options
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 5 | ||||
-rw-r--r-- | llvm/test/Demangle/invalid-manglings.test | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index b4e5cef7ac5..653c76e052f 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -1389,9 +1389,12 @@ Demangler::demangleFullyQualifiedSymbolName(StringView &MangledName) { return nullptr; if (Identifier->kind() == NodeKind::StructorIdentifier) { + if (QN->Components->Count < 2) { + Error = true; + return nullptr; + } StructorIdentifierNode *SIN = static_cast<StructorIdentifierNode *>(Identifier); - assert(QN->Components->Count >= 2); Node *ClassNode = QN->Components->Nodes[QN->Components->Count - 2]; SIN->Class = static_cast<IdentifierNode *>(ClassNode); } diff --git a/llvm/test/Demangle/invalid-manglings.test b/llvm/test/Demangle/invalid-manglings.test index af919282bb8..5c26ca421bf 100644 --- a/llvm/test/Demangle/invalid-manglings.test +++ b/llvm/test/Demangle/invalid-manglings.test @@ -19,3 +19,8 @@ ; CHECK-EMPTY: ; CHECK-NEXT: ?? ; CHECK-NEXT: error: Invalid mangled name + +??0@ +; CHECK-EMPTY: +; CHECK-NEXT: ??0@ +; CHECK-NEXT: error: Invalid mangled name |