[cfe-commits] r136938 - /cfe/trunk/test/Analysis/keychainAPI.m

Anna Zaks ganna at apple.com
Thu Aug 4 15:40:38 PDT 2011


Author: zaks
Date: Thu Aug  4 17:40:38 2011
New Revision: 136938

URL: http://llvm.org/viewvc/llvm-project?rev=136938&view=rev
Log:
KeychainAPI checker: forgot to commit the test with r136930. This should fix the bot. 

Modified:
    cfe/trunk/test/Analysis/keychainAPI.m

Modified: cfe/trunk/test/Analysis/keychainAPI.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/keychainAPI.m?rev=136938&r1=136937&r2=136938&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/keychainAPI.m (original)
+++ cfe/trunk/test/Analysis/keychainAPI.m Thu Aug  4 17:40:38 2011
@@ -10,6 +10,7 @@
 typedef unsigned int UInt16;
 typedef unsigned int SecProtocolType;
 typedef unsigned int SecAuthenticationType;
+typedef unsigned int SecKeychainAttributeInfo;
 enum {
   noErr                      = 0,
   GenericError               = 1
@@ -50,12 +51,24 @@
     void **passwordData,
     SecKeychainItemRef *itemRef
 );
+OSStatus SecKeychainItemCopyAttributesAndData (
+   SecKeychainItemRef itemRef,
+   SecKeychainAttributeInfo *info,
+   SecItemClass *itemClass,
+   SecKeychainAttributeList **attrList,
+   UInt32 *length,
+   void **outData
+);
 
-// Function which frees data.
+// Functions which free data.
 OSStatus SecKeychainItemFreeContent (
     SecKeychainAttributeList *attrList,
     void *data
 );
+OSStatus SecKeychainItemFreeAttributesAndData (
+   SecKeychainAttributeList *attrList,
+   void *data
+);
 
 void errRetVal() {
 	unsigned int *ptr = 0;
@@ -63,8 +76,8 @@
 	UInt32 length;
 	void *outData;
 	st = SecKeychainItemCopyContent(2, ptr, ptr, &length, &outData);
-	if (st == GenericError) // expected-warning{{Missing a call to SecKeychainItemFreeContent}}
-		SecKeychainItemFreeContent(ptr, outData);
+	if (st == GenericError) // expected-warning{{Allocated data is not released: missing a call to 'SecKeychainItemFreeContent'.}}
+		SecKeychainItemFreeContent(ptr, outData); // expected-warning{{Trying to free data which has not been allocated.}}
 }
 
 // If null is passed in, the data is not allocated, so no need for the matching free.
@@ -77,6 +90,15 @@
     SecKeychainItemCopyContent(2, ptr, ptr, length, outData);
 }// no-warning
 
+void doubleAlloc() {
+    unsigned int *ptr = 0;
+    OSStatus st = 0;
+    UInt32 *length = 0;
+    void **outData = 0;
+    SecKeychainItemCopyContent(2, ptr, ptr, length, outData);
+    SecKeychainItemCopyContent(2, ptr, ptr, length, outData);
+}// no-warning
+
 void fooOnlyFree() {
   unsigned int *ptr = 0;
   OSStatus st = 0;
@@ -95,8 +117,8 @@
 }// no-warning
 
 // Do not warn if the address is a parameter in the enclosing function.
-void fooOnlyFreeParam(void* X) {
-  SecKeychainItemFreeContent(X, X); 
+void fooOnlyFreeParam(void *attrList, void* X) {
+    SecKeychainItemFreeContent(attrList, X); 
 }// no-warning
 
 // If we are returning the value, no not report.
@@ -109,7 +131,46 @@
   return outData;
 } // no-warning
 
-int foo () {
+int apiMismatch(SecKeychainItemRef itemRef, 
+         SecKeychainAttributeInfo *info,
+         SecItemClass *itemClass) {
+  OSStatus st = 0;
+  SecKeychainAttributeList *attrList;
+  UInt32 length;
+  void *outData;
+  
+  st = SecKeychainItemCopyAttributesAndData(itemRef, info, itemClass, 
+                                            &attrList, &length, &outData); 
+  if (st == noErr)
+    SecKeychainItemFreeContent(attrList, outData); // expected-warning{{Allocator doesn't match the deallocator}}
+  return 0;
+}
+
+int ErrorCodesFromDifferentAPISDoNotInterfere(SecKeychainItemRef itemRef, 
+                                              SecKeychainAttributeInfo *info,
+                                              SecItemClass *itemClass) {
+  unsigned int *ptr = 0;
+  OSStatus st = 0;
+  UInt32 length;
+  void *outData;
+  OSStatus st2 = 0;
+  SecKeychainAttributeList *attrList;
+  UInt32 length2;
+  void *outData2;
+
+  st2 = SecKeychainItemCopyAttributesAndData(itemRef, info, itemClass, 
+                                             &attrList, &length2, &outData2);
+  st = SecKeychainItemCopyContent(2, ptr, ptr, &length, &outData);  
+  if (st == noErr) {
+    SecKeychainItemFreeContent(ptr, outData);
+    if (st2 == noErr) {
+      SecKeychainItemFreeAttributesAndData(attrList, outData2);
+    }
+  } 
+  return 0; // expected-warning{{Allocated data is not released: missing a call to 'SecKeychainItemFreeAttributesAndData'}}
+}
+
+int foo() {
   unsigned int *ptr = 0;
   OSStatus st = 0;
 





More information about the cfe-commits mailing list