]> granicus.if.org Git - llvm/commitdiff
llvm-undname: Don't crash on incomplete enum tag manglings
authorNico Weber <nicolasweber@gmx.de>
Thu, 11 Apr 2019 22:59:25 +0000 (22:59 +0000)
committerNico Weber <nicolasweber@gmx.de>
Thu, 11 Apr 2019 22:59:25 +0000 (22:59 +0000)
Found by inspection.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358238 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Demangle/MicrosoftDemangle.cpp
test/Demangle/invalid-manglings.test

index f45df9413d7f506ebd2fe0c952ee6b9843bf5da0..c4559ccb5e23a5451f56481536433cbc73d3f774 100644 (file)
@@ -1907,7 +1907,7 @@ TagTypeNode *Demangler::demangleClassType(StringView &MangledName) {
     TT = Arena.alloc<TagTypeNode>(TagKind::Class);
     break;
   case 'W':
-    if (MangledName.popFront() != '4') {
+    if (!MangledName.consumeFront('4')) {
       Error = true;
       return nullptr;
     }
index 4c155b765a4334fdab967667b22dd987f80b54b8..839218ad1019a0443127830b42b8cd386213867a 100644 (file)
 ; CHECK-EMPTY:
 ; CHECK-NEXT: ??C@$
 ; CHECK-NEXT: error: Invalid mangled name
+
+?x@@3PAW
+; CHECK-EMPTY:
+; CHECK-NEXT: ?x@@3PAW
+; CHECK-NEXT: error: Invalid mangled name