From: Nico Weber Date: Wed, 10 Apr 2019 17:31:34 +0000 (+0000) Subject: llvm-undname: Fix another crash-on-invalid X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12041c1bc882b017093a27f44df833ba4f2f0409;p=llvm llvm-undname: Fix another crash-on-invalid This fixes a regression from https://reviews.llvm.org/D60354. We used to SymbolNode *Symbol = demangleEncodedSymbol(MangledName, QN); if (Symbol) { Symbol->Name = QN; } but changed that to SymbolNode *Symbol = demangleEncodedSymbol(MangledName, QN); if (Error) return nullptr; Symbol->Name = QN; and one branch somewhere returned a nullptr without setting Error. Looking at the code changed in r340083 and r340710 that branch looks like a remnant from an earlier attempt to demangle RTTI descriptors that has since been rewritten -- so just remove this branch. It shouldn't change behavior for correctly mangled symbols. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358112 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Demangle/MicrosoftDemangle.cpp b/lib/Demangle/MicrosoftDemangle.cpp index b0f4d9a8a8f..c649552051f 100644 --- a/lib/Demangle/MicrosoftDemangle.cpp +++ b/lib/Demangle/MicrosoftDemangle.cpp @@ -696,8 +696,6 @@ SymbolNode *Demangler::demangleEncodedSymbol(StringView &MangledName, StorageClass SC = demangleVariableStorageClass(MangledName); return demangleVariableEncoding(MangledName, SC); } - case '8': - return nullptr; } FunctionSymbolNode *FSN = demangleFunctionEncoding(MangledName); diff --git a/test/Demangle/invalid-manglings.test b/test/Demangle/invalid-manglings.test index b6021761ed2..40bf92df357 100644 --- a/test/Demangle/invalid-manglings.test +++ b/test/Demangle/invalid-manglings.test @@ -89,3 +89,8 @@ ; CHECK-EMPTY: ; CHECK-NEXT: ??__E?Foo@@0HA@@ ; CHECK-NEXT: error: Invalid mangled name + +??8@8 +; CHECK-EMPTY: +; CHECK-NEXT: ??8@8 +; CHECK-NEXT: error: Invalid mangled name