]> granicus.if.org Git - llvm/commitdiff
llvm-undname: Fix another crash-on-invalid
authorNico Weber <nicolasweber@gmx.de>
Wed, 10 Apr 2019 17:31:34 +0000 (17:31 +0000)
committerNico Weber <nicolasweber@gmx.de>
Wed, 10 Apr 2019 17:31:34 +0000 (17:31 +0000)
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

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

index b0f4d9a8a8f041fb793e5fe94cdda87c4e770999..c649552051ff8726afce79e782a0edc8c7bdcdce 100644 (file)
@@ -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);
 
index b6021761ed240a73c8c5919bf61c20e71895e0ec..40bf92df3576c8a69118ca69d380364845372a25 100644 (file)
@@ -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