]> granicus.if.org Git - llvm/commitdiff
llvm-undname: Fix stack overflow on invalid found by oss-fuzz
authorNico Weber <nicolasweber@gmx.de>
Sun, 21 Apr 2019 14:25:07 +0000 (14:25 +0000)
committerNico Weber <nicolasweber@gmx.de>
Sun, 21 Apr 2019 14:25:07 +0000 (14:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358852 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 6431e4ab130baedd432f01a3e79284a2f9016de4..b421f2a7f93e137a599beb9c7d99e73ab4d095d1 100644 (file)
@@ -1292,7 +1292,7 @@ Demangler::demangleStringLiteral(StringView &MangledName) {
 
     unsigned BytesDecoded = 0;
     while (!MangledName.consumeFront('@')) {
-      if (MangledName.size() < 1)
+      if (MangledName.size() < 1 || BytesDecoded >= MaxStringByteLength)
         goto StringLiteralError;
       StringBytes[BytesDecoded++] = demangleCharLiteral(MangledName);
     }
index ef37518e54a3c3e1896bb190012ffd964695d7b4..fb66c2b1cda2206c919c1042a5d11b1728d40bd3 100644 (file)
 ; CHECK-EMPTY:
 ; CHECK-NEXT: ??_C@_1301234567@a
 ; CHECK-NEXT: error: Invalid mangled name
+
+??_C@_0601234567@abcdefghijklmnopqrtsuvwxyzABCDEFGHIJKLMNOPQRTSUVWXYZabcdefghijklmnopqrtsuvwxyzABCDEFGHIJKLMNOPQRTSUVWXYZabcdefghijklmnopqrtsuvwxyz
+; CHECK-EMPTY:
+; CHECK-NEXT: ??_C@_0601234567@abcdefghijklmnopqrtsuvwxyzABCDEFGHIJKLMNOPQRTSUVWXYZabcdefghijklmnopqrtsuvwxyzABCDEFGHIJKLMNOPQRTSUVWXYZabcdefghijklmnopqrtsuvwxyz
+; CHECK-NEXT: error: Invalid mangled name