From 7947bb127629faff4897f04e579d80fd0d7f97f0 Mon Sep 17 00:00:00 2001 From: Anna Zaks Date: Fri, 6 Apr 2012 01:00:47 +0000 Subject: [PATCH] [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 --- .../Core/PathSensitive/ObjCMessage.h | 1 + test/Analysis/malloc.mm | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) 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 -- 2.40.0