diff options
| -rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 4 | ||||
| -rw-r--r-- | llvm/test/Demangle/invalid-manglings.test | 7 |
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index c75175c9f9c..b8e39c41527 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/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/llvm/test/Demangle/invalid-manglings.test b/llvm/test/Demangle/invalid-manglings.test index 365b14cd1a5..6883a46d8d3 100644 --- a/llvm/test/Demangle/invalid-manglings.test +++ b/llvm/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 |

