diff options
author | Nico Weber <nicolasweber@gmx.de> | 2019-04-11 23:11:33 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2019-04-11 23:11:33 +0000 |
commit | 03db625c1387940624fcb0ca6be56eaed6ccf192 (patch) | |
tree | 50ecebc020e0cff37762142f222866f97846f8f6 /llvm/lib/Demangle | |
parent | e5b62654a5df4d51d65f4ffd9daf1057e1255a6e (diff) | |
download | bcm5719-llvm-03db625c1387940624fcb0ca6be56eaed6ccf192.tar.gz bcm5719-llvm-03db625c1387940624fcb0ca6be56eaed6ccf192.zip |
llvm-undname: Fix out-of-bounds read on invalid intrinsic function code
Found by inspection.
llvm-svn: 358239
Diffstat (limited to 'llvm/lib/Demangle')
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index c4559ccb5e2..0c3602a4a4c 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -511,12 +511,18 @@ Demangler::demangleLiteralOperatorIdentifier(StringView &MangledName) { return N; } -static IntrinsicFunctionKind -translateIntrinsicFunctionCode(char CH, FunctionIdentifierCodeGroup Group) { +IntrinsicFunctionKind +Demangler::translateIntrinsicFunctionCode(char CH, + FunctionIdentifierCodeGroup Group) { + using IFK = IntrinsicFunctionKind; + if (!(CH >= '0' && CH <= '9') && !(CH >= 'A' && CH <= 'Z')) { + Error = true; + return IFK::None; + } + // Not all ? identifiers are intrinsics *functions*. This function only maps // operator codes for the special functions, all others are handled elsewhere, // hence the IFK::None entries in the table. - using IFK = IntrinsicFunctionKind; static IFK Basic[36] = { IFK::None, // ?0 # Foo::Foo() IFK::None, // ?1 # Foo::~Foo() |