[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;
}