[Pcsclite-cvs-commit] CVS PKCS11/src

CVS User rousseau ludovic.rousseau@free.fr
Sun, 28 Nov 2004 07:09:20 -0700


Update of /cvsroot/muscleapps/PKCS11/src
In directory haydn:/tmp/cvs-serv19169

Modified Files:
	p11_object.c 
Log Message:
C_FindObjectsInit() & C_FindObjectsFinal(): properly deep copy the
template data structure and free it in C_FindObjectsFinal

Thanks to  Peter Stamfest for the patch


--- /cvsroot/muscleapps/PKCS11/src/p11_object.c	2003/10/04 08:30:18	1.23
+++ /cvsroot/muscleapps/PKCS11/src/p11_object.c	2004/11/28 14:09:20	1.24
@@ -1,6 +1,6 @@
 /******************************************************************************
 ** 
-**  $Id: p11_object.c,v 1.23 2003/10/04 08:30:18 rousseau Exp $
+**  $Id: p11_object.c,v 1.24 2004/11/28 14:09:20 rousseau Exp $
 **
 **  Package: PKCS-11
 **  Author : Chris Osgood <oznet@mac.com>
@@ -509,7 +509,26 @@
                 rv = CKR_HOST_MEMORY;
             else
             {
+		int i;
                 memcpy(session->search_attrib, pTemplate, ulCount * sizeof(CK_ATTRIBUTE));
+		for (i=0; i<ulCount; i++) {
+		    session->search_attrib[i].pValue = 
+			malloc(session->search_attrib[i].ulValueLen);
+		    if (NULL == session->search_attrib[i].pValue) {
+			/* avoid leaking memory here */
+			int k; 
+			for (k=0 ; k<i ; k++)
+			    free(session->search_attrib[k].pValue);
+
+			free(session->search_attrib);
+			session->search_attrib = NULL;
+
+			rv = CKR_HOST_MEMORY;
+			goto finish;
+		    }
+		    memcpy(session->search_attrib[i].pValue, 
+			   pTemplate[i].pValue, pTemplate[i].ulValueLen);
+		}
                 session->search_attrib_count = ulCount;
             }
         }
@@ -659,6 +678,15 @@
 
         if (session->search_attrib)
         {
+	    int j;
+	    for (j=0 ; j<session->search_attrib_count; j++) {
+		if (session->search_attrib[j].pValue) {
+		    /* redundant if, actually */
+		    free(session->search_attrib[j].pValue);
+		    session->search_attrib[j].pValue = NULL;
+		}
+	    }
+
             free(session->search_attrib);
             session->search_attrib = 0x00;
         }