diff --git a/lib/Demangle/MicrosoftDemangle.cpp b/lib/Demangle/MicrosoftDemangle.cpp index 882913a9863..2b41c0037f9 100644 --- a/lib/Demangle/MicrosoftDemangle.cpp +++ b/lib/Demangle/MicrosoftDemangle.cpp @@ -276,6 +276,10 @@ Demangler::demangleSpecialTableSymbolNode(StringView &MangledName, SpecialTableSymbolNode *STSN = Arena.alloc(); STSN->Name = QN; bool IsMember = false; + if (MangledName.empty()) { + Error = true; + return nullptr; + } char Front = MangledName.popFront(); if (Front != '6' && Front != '7') { Error = true; diff --git a/test/Demangle/invalid-manglings.test b/test/Demangle/invalid-manglings.test index eb22d1e0a4c..869d63a274f 100644 --- a/test/Demangle/invalid-manglings.test +++ b/test/Demangle/invalid-manglings.test @@ -119,3 +119,13 @@ ; CHECK-EMPTY: ; CHECK-NEXT: ?foo@?$?_ ; CHECK-NEXT: error: Invalid mangled name + +??_R4 +; CHECK-EMPTY: +; CHECK-NEXT: ??_R4 +; CHECK-NEXT: error: Invalid mangled name + +??_R4foo@@ +; CHECK-EMPTY: +; CHECK-NEXT: ??_R4foo@@ +; CHECK-NEXT: error: Invalid mangled name