From: Nico Weber Date: Wed, 3 Apr 2019 23:23:32 +0000 (+0000) Subject: llvm-undame: Fix an assert-on-invalid X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=79f7028ca6a64f41e89639f95e6cc33b2588b13a;p=llvm llvm-undame: Fix an assert-on-invalid Found by oss-fuzz, fixes issue 12432 on os-fuzz. Differential Revision: https://reviews.llvm.org/D60206 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357648 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Demangle/MicrosoftDemangle.cpp b/lib/Demangle/MicrosoftDemangle.cpp index b4e5cef7ac5..653c76e052f 100644 --- a/lib/Demangle/MicrosoftDemangle.cpp +++ b/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(Identifier); - assert(QN->Components->Count >= 2); Node *ClassNode = QN->Components->Nodes[QN->Components->Count - 2]; SIN->Class = static_cast(ClassNode); } diff --git a/test/Demangle/invalid-manglings.test b/test/Demangle/invalid-manglings.test index af919282bb8..5c26ca421bf 100644 --- a/test/Demangle/invalid-manglings.test +++ b/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