llvm-undname: Fix more crashes and asserts on invalid inputs
authorNico Weber <nicolasweber@gmx.de>
Mon, 8 Apr 2019 19:46:53 +0000 (19:46 +0000)
committerNico Weber <nicolasweber@gmx.de>
Mon, 8 Apr 2019 19:46:53 +0000 (19:46 +0000)
commit63b97d2a67b41c80f7059401ae6ba2d1c79fa53c
tree7f646ef161883a62bc971f6559b3f31de5555afd
parent3a4c2192a471cdc90dda914d734a0cb837a4d462
llvm-undname: Fix more crashes and asserts on invalid inputs

For functions whose callers don't check that enough input is present,
add checks at the start of the function that enough input is there and
set Error otherwise.

For functions that return AST objects, return nullptr instead of
incomplete AST objects with nullptr fields if an error occurred during
the function.

Introduce a new function demangleDeclarator() for the sequence
demangleFullyQualifiedSymbolName(); demangleEncodedSymbol() and
use it in the two places that had this sequence. Let this new function
check that ConversionOperatorIdentifiers have a valid TargetType.

Some of the bad inputs found by oss-fuzz, others by inspection.

Differential Revision: https://reviews.llvm.org/D60354

llvm-svn: 357936
llvm/include/llvm/Demangle/MicrosoftDemangle.h
llvm/lib/Demangle/MicrosoftDemangle.cpp
llvm/test/Demangle/invalid-manglings.test