diff options
author | Anna Zaks <ganna@apple.com> | 2012-04-06 01:00:47 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-04-06 01:00:47 +0000 |
commit | 7947bb127629faff4897f04e579d80fd0d7f97f0 (patch) | |
tree | 412596cea56a6f6a8eaaa05559228d91625ffc7e | |
parent | bf9658c3c200ee19bf0b6b157149f2376e39d270 (diff) |
[analyzer]Fix false positive: pointer might escape through CG*WithData.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154156 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h | 1 | ||||
-rw-r--r-- | test/Analysis/malloc.mm | 18 |
2 files changed, 19 insertions, 0 deletions
diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h b/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h index 33934af10c..d8aec0991d 100644 --- a/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h +++ b/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h @@ -278,6 +278,7 @@ public: if (StrInStrNoCase(FName, "InsertValue") != StringRef::npos|| StrInStrNoCase(FName, "AddValue") != StringRef::npos || StrInStrNoCase(FName, "SetValue") != StringRef::npos || + StrInStrNoCase(FName, "WithData") != StringRef::npos || StrInStrNoCase(FName, "AppendValue") != StringRef::npos|| StrInStrNoCase(FName, "SetAttribute") != StringRef::npos) { return true; diff --git a/test/Analysis/malloc.mm b/test/Analysis/malloc.mm index d2409ac160..3515a4f99a 100644 --- a/test/Analysis/malloc.mm +++ b/test/Analysis/malloc.mm @@ -136,3 +136,21 @@ static inline void radar11111210(OSQueueHead *pool) { OSAtomicEnqueue(pool, newItem, 4); } +// Pointer might escape through CGDataProviderCreateWithData (radar://11187558). +typedef struct CGDataProvider *CGDataProviderRef; +typedef void (*CGDataProviderReleaseDataCallback)(void *info, const void *data, + size_t size); +extern CGDataProviderRef CGDataProviderCreateWithData(void *info, + const void *data, size_t size, + CGDataProviderReleaseDataCallback releaseData) + __attribute__((visibility("default"))); +void *calloc(size_t, size_t); + +static void releaseDataCallback (void *info, const void *data, size_t size) { +#pragma unused (info, size) + free((void*)data); +} +void testCGDataProviderCreateWithData() { + void* b = calloc(8, 8); + CGDataProviderRef p = CGDataProviderCreateWithData(0, b, 8*8, releaseDataCallback); +}
\ No newline at end of file |