diff options
Diffstat (limited to 'test/Analysis/keychainAPI.m')
-rw-r--r-- | test/Analysis/keychainAPI.m | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/test/Analysis/keychainAPI.m b/test/Analysis/keychainAPI.m index fe6c61d..4fc48c0 100644 --- a/test/Analysis/keychainAPI.m +++ b/test/Analysis/keychainAPI.m @@ -76,9 +76,9 @@ void errRetVal() { UInt32 length; void *outData; st = SecKeychainItemCopyContent(2, ptr, ptr, &length, &outData); - if (st == GenericError) // expected-warning{{Allocated data is not released: missing a call to 'SecKeychainItemFreeContent'}} + if (st == GenericError) SecKeychainItemFreeContent(ptr, outData); // expected-warning{{Only call free if a valid (non-NULL) buffer was returned}} -} +} // expected-warning{{Allocated data is not released: missing a call to 'SecKeychainItemFreeContent'}} // If null is passed in, the data is not allocated, so no need for the matching free. void fooDoNotReportNull() { @@ -305,6 +305,25 @@ void DellocWithCFStringCreate4(CFAllocatorRef alloc) { } } +static CFAllocatorRef gKeychainDeallocator = 0; + +static CFAllocatorRef GetKeychainDeallocator() { + return gKeychainDeallocator; +} + +CFStringRef DellocWithCFStringCreate5(CFAllocatorRef alloc) { + unsigned int *ptr = 0; + OSStatus st = 0; + UInt32 length; + void *bytes; + char * x; + st = SecKeychainItemCopyContent(2, ptr, ptr, &length, &bytes); + if (st == noErr) { + return CFStringCreateWithBytesNoCopy(alloc, bytes, length, 5, 0, GetKeychainDeallocator()); // no-warning + } + return 0; +} + void radar10508828() { UInt32 pwdLen = 0; void* pwdBytes = 0; |