1 | |
2 | |
3 | void test() { |
4 | unsigned int *ptr = 0; |
5 | UInt32 length; |
6 | |
7 | SecKeychainItemFreeContent(ptr, &length); |
8 | // warn: trying to free data which has not been allocated |
9 | } |
10 | |
11 | void test() { |
12 | unsigned int *ptr = 0; |
13 | UInt32 *length = 0; |
14 | void *outData; |
15 | |
16 | OSStatus st = |
17 | SecKeychainItemCopyContent(2, ptr, ptr, length, outData); |
18 | // warn: data is not released |
19 | } |
20 | |
21 | void test() { |
22 | unsigned int *ptr = 0; |
23 | UInt32 *length = 0; |
24 | void *outData; |
25 | |
26 | OSStatus st = |
27 | SecKeychainItemCopyContent(2, ptr, ptr, length, &outData); |
28 | |
29 | SecKeychainItemFreeContent(ptr, outData); |
30 | // warn: only call free if a non-NULL buffer was returned |
31 | } |
32 | |
33 | void test() { |
34 | unsigned int *ptr = 0; |
35 | UInt32 *length = 0; |
36 | void *outData; |
37 | |
38 | OSStatus st = |
39 | SecKeychainItemCopyContent(2, ptr, ptr, length, &outData); |
40 | |
41 | st = SecKeychainItemCopyContent(2, ptr, ptr, length, &outData); |
42 | // warn: release data before another call to the allocator |
43 | |
44 | if (st == noErr) |
45 | SecKeychainItemFreeContent(ptr, outData); |
46 | } |
47 | |
48 | void test() { |
49 | SecKeychainItemRef itemRef = 0; |
50 | SecKeychainAttributeInfo *info = 0; |
51 | SecItemClass *itemClass = 0; |
52 | SecKeychainAttributeList *attrList = 0; |
53 | UInt32 *length = 0; |
54 | void *outData = 0; |
55 | |
56 | OSStatus st = |
57 | SecKeychainItemCopyAttributesAndData(itemRef, info, |
58 | itemClass, &attrList, |
59 | length, &outData); |
60 | |
61 | SecKeychainItemFreeContent(attrList, outData); |
62 | // warn: deallocator doesn't match the allocator |
63 | } |
64 | |
65 | |