[cfe-commits] r158875 - in /cfe/trunk: lib/StaticAnalyzer/Checkers/MallocChecker.cpp test/Analysis/malloc.c test/Analysis/system-header-simulator.h
Anna Zaks
ganna at apple.com
Wed Jun 20 16:50:54 PDT 2012
On Jun 20, 2012, at 4:42 PM, Jordan Rose wrote:
> A lot of this is overlapping CallOrObjCMessage's hasNonZeroCallbackArg. Should we be using that instead to pre-emptively strike these out?
>
hasNonZeroCallbackArg helps in cases when we pass the pointer to a function which also takes a callback as a parameter. This is not the case here (Otherwise, it should have just worked since malloc checker uses the function) - we pass the pointer to one API and set the callback using another one.
> (There are a couple cases that still matter, like the "NoCopy" ones, but other than that…)
>
>
> On Jun 20, 2012, at 16:35 , Anna Zaks <ganna at apple.com> wrote:
>
>> Author: zaks
>> Date: Wed Jun 20 18:35:57 2012
>> New Revision: 158875
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=158875&view=rev
>> Log:
>> [analyzer] Malloc leak false positive: Allow xpc context to escape.
>>
>> Modified:
>> cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
>> cfe/trunk/test/Analysis/malloc.c
>> cfe/trunk/test/Analysis/system-header-simulator.h
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=158875&r1=158874&r2=158875&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Wed Jun 20 18:35:57 2012
>> @@ -1298,6 +1298,12 @@
>> if (FName.equals("pthread_setspecific"))
>> return false;
>>
>> + // White list xpc connection context.
>> + // TODO: Ensure that the deallocation actually happens, need to reason
>> + // about "xpc_connection_set_finalizer_f".
>> + if (FName.equals("xpc_connection_set_context"))
>> + return false;
>> +
>> // White list the 'XXXNoCopy' ObjC functions.
>> if (FName.endswith("NoCopy")) {
>> // Look for the deallocator argument. We know that the memory ownership
>>
>> Modified: cfe/trunk/test/Analysis/malloc.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/malloc.c?rev=158875&r1=158874&r2=158875&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/Analysis/malloc.c (original)
>> +++ cfe/trunk/test/Analysis/malloc.c Wed Jun 20 18:35:57 2012
>> @@ -974,3 +974,16 @@
>> // object doesn't escape and it hasn't been freed in this function.
>> }
>>
>> +// Allow xpc context to escape. radar://11635258
>> +// TODO: Would be great if we checked that the finalize_connection_context actually releases it.
>> +static void finalize_connection_context(void *ctx) {
>> + int *context = ctx;
>> + free(context);
>> +}
>> +void foo (xpc_connection_t peer) {
>> + int *ctx = calloc(1, sizeof(int));
>> + xpc_connection_set_context(peer, ctx);
>> + xpc_connection_set_finalizer_f(peer, finalize_connection_context);
>> + xpc_connection_resume(peer);
>> +}
>> +
>>
>> Modified: cfe/trunk/test/Analysis/system-header-simulator.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/system-header-simulator.h?rev=158875&r1=158874&r2=158875&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/Analysis/system-header-simulator.h (original)
>> +++ cfe/trunk/test/Analysis/system-header-simulator.h Wed Jun 20 18:35:57 2012
>> @@ -53,3 +53,10 @@
>> CGColorSpaceRef space,
>> CGBitmapInfo bitmapInfo*/);
>> void *CGBitmapContextGetData(CGContextRef context);
>> +
>> +// Include xpc.
>> +typedef struct _xpc_connection_s * xpc_connection_t;
>> +typedef void (*xpc_finalizer_t)(void *value);
>> +void xpc_connection_set_context(xpc_connection_t connection, void *context);
>> +void xpc_connection_set_finalizer_f(xpc_connection_t connection, xpc_finalizer_t finalizer);
>> +void xpc_connection_resume(xpc_connection_t connection);
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list