diff options
author | Florian Hahn <florian.hahn@arm.com> | 2017-12-20 11:32:43 +0000 |
---|---|---|
committer | Florian Hahn <florian.hahn@arm.com> | 2017-12-20 11:32:43 +0000 |
commit | 3cfdaa30e28ddd35290fe319a2d2f903977d4233 (patch) | |
tree | d190e5b297fa9e7d95e2f1e0108a56130c940dfd /llvm/lib/Support/TargetParser.cpp | |
parent | 75ce852abe1bdd49fda09489da0545530e817640 (diff) | |
download | bcm5719-llvm-3cfdaa30e28ddd35290fe319a2d2f903977d4233.tar.gz bcm5719-llvm-3cfdaa30e28ddd35290fe319a2d2f903977d4233.zip |
[TargetParser] Check size before accessing architecture version.
Summary:
This fixes a crash when invalid -march options like `armv` are provided.
Based on a patch by Will Lovett.
Reviewers: rengolin, samparker, mcrosier
Reviewed By: samparker
Subscribers: aemerson, kristof.beyls, llvm-commits
Differential Revision: https://reviews.llvm.org/D41429
llvm-svn: 321166
Diffstat (limited to 'llvm/lib/Support/TargetParser.cpp')
-rw-r--r-- | llvm/lib/Support/TargetParser.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Support/TargetParser.cpp b/llvm/lib/Support/TargetParser.cpp index ea12d8001a3..b96ca084e9b 100644 --- a/llvm/lib/Support/TargetParser.cpp +++ b/llvm/lib/Support/TargetParser.cpp @@ -537,7 +537,7 @@ StringRef llvm::AArch64::getDefaultCPU(StringRef Arch) { } unsigned llvm::AArch64::checkArchVersion(StringRef Arch) { - if (Arch[0] == 'v' && std::isdigit(Arch[1])) + if (Arch.size() >= 2 && Arch[0] == 'v' && std::isdigit(Arch[1])) return (Arch[1] - 48); return 0; } @@ -633,7 +633,7 @@ StringRef llvm::ARM::getCanonicalArchName(StringRef Arch) { // Only match non-marketing names if (offset != StringRef::npos) { // Must start with 'vN'. - if (A[0] != 'v' || !std::isdigit(A[1])) + if (A.size() >= 2 && (A[0] != 'v' || !std::isdigit(A[1]))) return Error; // Can't have an extra 'eb'. if (A.find("eb") != StringRef::npos) |