llvm-undname: Fix crash on incomplete virtual this adjusts

Found by oss-fuzz.

Also remove an else-after-return, this part has no behavior change.

llvm-svn: 358237
This commit is contained in:
Nico Weber 2019-04-11 22:47:18 +00:00
parent 8ec304c9fd
commit b4f33bbbb0
2 changed files with 8 additions and 2 deletions

View File

@ -481,7 +481,7 @@ Demangler::demangleFunctionIdentifierCode(StringView &MangledName) {
if (MangledName.consumeFront("__"))
return demangleFunctionIdentifierCode(
MangledName, FunctionIdentifierCodeGroup::DoubleUnder);
else if (MangledName.consumeFront("_"))
if (MangledName.consumeFront("_"))
return demangleFunctionIdentifierCode(MangledName,
FunctionIdentifierCodeGroup::Under);
return demangleFunctionIdentifierCode(MangledName,
@ -1575,7 +1575,8 @@ FuncClass Demangler::demangleFunctionClass(StringView &MangledName) {
FuncClass VFlag = FC_VirtualThisAdjust;
if (MangledName.consumeFront('R'))
VFlag = FuncClass(VFlag | FC_VirtualThisAdjustEx);
if (MangledName.empty())
break;
switch (MangledName.popFront()) {
case '0':
return FuncClass(FC_Private | FC_Virtual | VFlag);

View File

@ -99,3 +99,8 @@
; CHECK-EMPTY:
; CHECK-NEXT: ?B@?$?K$H?
; CHECK-NEXT: error: Invalid mangled name
??C@$
; CHECK-EMPTY:
; CHECK-NEXT: ??C@$
; CHECK-NEXT: error: Invalid mangled name