From 61d2657ecc91abdbe34cf26e95ebd8d41593fe82 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 3 Apr 2019 23:15:56 +0000 Subject: [PATCH] llvm-undname: Fix a crash-on-invalid Found by oss-fuzz, fixes issues 12435 and 12438 on oss-fuzz. Differential Revision: https://reviews.llvm.org/D60202 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357646 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Demangle/MicrosoftDemangle.cpp | 4 ++++ test/Demangle/invalid-manglings.test | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/Demangle/MicrosoftDemangle.cpp b/lib/Demangle/MicrosoftDemangle.cpp index c75175c9f9c..b8e39c41527 100644 --- a/lib/Demangle/MicrosoftDemangle.cpp +++ b/lib/Demangle/MicrosoftDemangle.cpp @@ -1276,12 +1276,16 @@ StringLiteralError: return nullptr; } +// Returns MangledName's prefix before the first '@', or an error if +// MangledName contains no '@' or the prefix has length 0. StringView Demangler::demangleSimpleString(StringView &MangledName, bool Memorize) { StringView S; for (size_t i = 0; i < MangledName.size(); ++i) { if (MangledName[i] != '@') continue; + if (i == 0) + break; S = MangledName.substr(0, i); MangledName = MangledName.dropFront(i + 1); diff --git a/test/Demangle/invalid-manglings.test b/test/Demangle/invalid-manglings.test index 365b14cd1a5..6883a46d8d3 100644 --- a/test/Demangle/invalid-manglings.test +++ b/test/Demangle/invalid-manglings.test @@ -8,4 +8,9 @@ ?f0@@YAXPEU?$AS_@$00$$CAD@__clang@@@Z ; CHECK-EMPTY: ; CHECK-NEXT: ?f0@@YAXPEU?$AS_@$00$$CAD@__clang@@@Z -; CHECK-NEXT: error: Invalid mangled name \ No newline at end of file +; CHECK-NEXT: error: Invalid mangled name + +?@@8 +; CHECK-EMPTY: +; CHECK-NEXT: ?@@8 +; CHECK-NEXT: error: Invalid mangled name -- 2.50.1