summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2017-09-15 19:51:26 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2017-09-15 19:51:26 +0000
commite28adb4fb2a1f773e5f8ed5172df392fc4d40506 (patch)
tree561eb580d64bb15b442ae0aea7146d8ae04f5b47 /clang
parent457fb0b4a07e0d1249322f3737f057e7c358136c (diff)
downloadbcm5719-llvm-e28adb4fb2a1f773e5f8ed5172df392fc4d40506.tar.gz
bcm5719-llvm-e28adb4fb2a1f773e5f8ed5172df392fc4d40506.zip
[Analyzer] Check function name size before indexing.
https://reviews.llvm.org/D37908 llvm-svn: 313385
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp3
-rw-r--r--clang/test/Analysis/retain-release.mm2
2 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
index c348ecf4fd8..165bc049938 100644
--- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
@@ -1211,7 +1211,8 @@ RetainSummaryManager::getFunctionSummary(const FunctionDecl *FD) {
// Check for release functions, the only kind of functions that we care
// about that don't return a pointer type.
- if (FName[0] == 'C' && (FName[1] == 'F' || FName[1] == 'G')) {
+ if (FName.size() >= 2 &&
+ FName[0] == 'C' && (FName[1] == 'F' || FName[1] == 'G')) {
// Test for 'CGCF'.
FName = FName.substr(FName.startswith("CGCF") ? 4 : 2);
diff --git a/clang/test/Analysis/retain-release.mm b/clang/test/Analysis/retain-release.mm
index c9817005c2c..c694fd33c59 100644
--- a/clang/test/Analysis/retain-release.mm
+++ b/clang/test/Analysis/retain-release.mm
@@ -461,3 +461,5 @@ void radar13722286::PrepareBitmap() {
}
}
+// rdar://34210609
+void _() { _(); }; // no-warning
OpenPOWER on IntegriCloud