summaryrefslogtreecommitdiff
path: root/security/nss/lib/dev
diff options
context:
space:
mode:
authornelsonb%netscape.com <devnull@localhost>2003-09-23 20:47:43 +0000
committernelsonb%netscape.com <devnull@localhost>2003-09-23 20:47:43 +0000
commit7988fdd9de44705c6fc6781e6f93c8911c6d5651 (patch)
treed4933aebf7cee1d5b3b96a7bdabc06b4b036b4bd /security/nss/lib/dev
parent5ae160523bda110f449a53971c98c94c39a73464 (diff)
downloadnss-hg-7988fdd9de44705c6fc6781e6f93c8911c6d5651.tar.gz
Fix bug 204549. Properly handle memory allocation failures.
Diffstat (limited to 'security/nss/lib/dev')
-rw-r--r--security/nss/lib/dev/devutil.c46
1 files changed, 23 insertions, 23 deletions
diff --git a/security/nss/lib/dev/devutil.c b/security/nss/lib/dev/devutil.c
index e9d81281a..48847a74b 100644
--- a/security/nss/lib/dev/devutil.c
+++ b/security/nss/lib/dev/devutil.c
@@ -647,15 +647,15 @@ create_object_array (
PRStatus *status
)
{
- nssCryptokiObject **op = objects;
nssCryptokiObjectAndAttributes **rvOandA = NULL;
*numObjects = 0;
/* There are no objects for this type */
- if (!objects) {
- return (nssCryptokiObjectAndAttributes **)NULL;
+ if (!objects || !*objects) {
+ *status = PR_SUCCESS;
+ return rvOandA;
}
- while (*op++) (*numObjects)++;
- if (*numObjects == MAX_LOCAL_CACHE_OBJECTS) {
+ while (*objects++) (*numObjects)++;
+ if (*numObjects >= MAX_LOCAL_CACHE_OBJECTS) {
/* Hit the maximum allowed, so don't use a cache (there are
* too many objects to make caching worthwhile, presumably, if
* the token can handle that many objects, it can handle searching.
@@ -663,11 +663,11 @@ create_object_array (
*doObjects = PR_FALSE;
*status = PR_FAILURE;
*numObjects = 0;
- } else if (*numObjects > 0) {
+ } else {
rvOandA = nss_ZNEWARRAY(NULL,
nssCryptokiObjectAndAttributes *,
*numObjects + 1);
- *status = rvOandA ? PR_SUCCESS : PR_FALSE;
+ *status = rvOandA ? PR_SUCCESS : PR_FAILURE;
}
return rvOandA;
}
@@ -675,7 +675,7 @@ create_object_array (
static nssCryptokiObjectAndAttributes *
create_object (
nssCryptokiObject *object,
- CK_ATTRIBUTE_TYPE *types,
+ const CK_ATTRIBUTE_TYPE *types,
PRUint32 numTypes,
PRStatus *status
)
@@ -691,8 +691,7 @@ create_object (
arena = nssArena_Create();
if (!arena) {
- nssSlot_Destroy(slot);
- return (nssCryptokiObjectAndAttributes *)NULL;
+ goto loser;
}
rvCachedObject = nss_ZNEW(arena, nssCryptokiObjectAndAttributes);
if (!rvCachedObject) {
@@ -731,7 +730,8 @@ loser:
if (slot) {
nssSlot_Destroy(slot);
}
- nssArena_Destroy(arena);
+ if (arena)
+ nssArena_Destroy(arena);
return (nssCryptokiObjectAndAttributes *)NULL;
}
@@ -802,7 +802,7 @@ create_cert (
PRStatus *status
)
{
- CK_ATTRIBUTE_TYPE certAttr[] = {
+ static const CK_ATTRIBUTE_TYPE certAttr[] = {
CKA_CLASS,
CKA_TOKEN,
CKA_LABEL,
@@ -814,7 +814,7 @@ create_cert (
CKA_SUBJECT,
CKA_NETSCAPE_EMAIL
};
- PRUint32 numCertAttr = sizeof(certAttr) / sizeof(certAttr[0]);
+ static const PRUint32 numCertAttr = sizeof(certAttr) / sizeof(certAttr[0]);
return create_object(object, certAttr, numCertAttr, status);
}
@@ -863,8 +863,8 @@ get_token_certs_for_cache (
PRUint32 j;
for (j=0; j<i; j++) {
/* sigh */
- nssToken_AddRef(cache->objects[cachedCerts][i]->object->token);
- nssArena_Destroy(cache->objects[cachedCerts][i]->arena);
+ nssToken_AddRef(cache->objects[cachedCerts][j]->object->token);
+ nssArena_Destroy(cache->objects[cachedCerts][j]->arena);
}
nssCryptokiObjectArray_Destroy(objects);
}
@@ -878,7 +878,7 @@ create_trust (
PRStatus *status
)
{
- CK_ATTRIBUTE_TYPE trustAttr[] = {
+ static const CK_ATTRIBUTE_TYPE trustAttr[] = {
CKA_CLASS,
CKA_TOKEN,
CKA_LABEL,
@@ -891,7 +891,7 @@ create_trust (
CKA_TRUST_EMAIL_PROTECTION,
CKA_TRUST_CODE_SIGNING
};
- PRUint32 numTrustAttr = sizeof(trustAttr) / sizeof(trustAttr[0]);
+ static const PRUint32 numTrustAttr = sizeof(trustAttr) / sizeof(trustAttr[0]);
return create_object(object, trustAttr, numTrustAttr, status);
}
@@ -940,8 +940,8 @@ get_token_trust_for_cache (
PRUint32 j;
for (j=0; j<i; j++) {
/* sigh */
- nssToken_AddRef(cache->objects[cachedTrust][i]->object->token);
- nssArena_Destroy(cache->objects[cachedTrust][i]->arena);
+ nssToken_AddRef(cache->objects[cachedTrust][j]->object->token);
+ nssArena_Destroy(cache->objects[cachedTrust][j]->arena);
}
nssCryptokiObjectArray_Destroy(objects);
}
@@ -955,7 +955,7 @@ create_crl (
PRStatus *status
)
{
- CK_ATTRIBUTE_TYPE crlAttr[] = {
+ static const CK_ATTRIBUTE_TYPE crlAttr[] = {
CKA_CLASS,
CKA_TOKEN,
CKA_LABEL,
@@ -964,7 +964,7 @@ create_crl (
CKA_NETSCAPE_KRL,
CKA_NETSCAPE_URL
};
- PRUint32 numCRLAttr = sizeof(crlAttr) / sizeof(crlAttr[0]);
+ static const PRUint32 numCRLAttr = sizeof(crlAttr) / sizeof(crlAttr[0]);
return create_object(object, crlAttr, numCRLAttr, status);
}
@@ -1013,8 +1013,8 @@ get_token_crls_for_cache (
PRUint32 j;
for (j=0; j<i; j++) {
/* sigh */
- nssToken_AddRef(cache->objects[cachedCRLs][i]->object->token);
- nssArena_Destroy(cache->objects[cachedCRLs][i]->arena);
+ nssToken_AddRef(cache->objects[cachedCRLs][j]->object->token);
+ nssArena_Destroy(cache->objects[cachedCRLs][j]->arena);
}
nssCryptokiObjectArray_Destroy(objects);
}