forked from OSchip/llvm-project
				
			[analyzer]Fix false positive: pointer might escape through CG*WithData.
llvm-svn: 154156
This commit is contained in:
		
							parent
							
								
									f1548d4f74
								
							
						
					
					
						commit
						e8628c5bc7
					
				| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue