summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrelyea%netscape.com <devnull@localhost>2002-02-15 17:37:58 +0000
committerrelyea%netscape.com <devnull@localhost>2002-02-15 17:37:58 +0000
commita164dd719fd6c54d5f4cfce6d0b50141342c1801 (patch)
tree32b3980159b67adfa8e58bb48dc072fcfa4ea4bc
parent3b0b7822a3e4f124ff6e39e0aa970cad1fd0ef71 (diff)
downloadnss-hg-a164dd719fd6c54d5f4cfce6d0b50141342c1801.tar.gz
Fix missing certs from the listing of all the certs in tokens with large cert caches (larger than 32).
-rw-r--r--security/nss/lib/dev/devobject.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/security/nss/lib/dev/devobject.c b/security/nss/lib/dev/devobject.c
index 2c9369652..46c40120e 100644
--- a/security/nss/lib/dev/devobject.c
+++ b/security/nss/lib/dev/devobject.c
@@ -213,6 +213,7 @@ traverse_objects_by_template
NSSArena *objectArena = NULL;
nssSession *session;
nssList *objectList = NULL;
+ int objectStackSize = OBJECT_STACK_SIZE;
slot = tok->slot;
objectStack = startOS;
session = (sessionOpt) ? sessionOpt : tok->defaultSession;
@@ -225,19 +226,25 @@ traverse_objects_by_template
}
while (PR_TRUE) {
ckrv = CKAPI(slot)->C_FindObjects(hSession, objectStack,
- OBJECT_STACK_SIZE, &count);
+ objectStackSize, &count);
if (ckrv != CKR_OK) {
nssSession_ExitMonitor(session);
goto loser;
}
- if (count == OBJECT_STACK_SIZE) {
+ if (count == objectStackSize) {
if (!objectList) {
objectArena = NSSArena_Create();
objectList = nssList_Create(objectArena, PR_FALSE);
}
- objectStack = nss_ZNEWARRAY(objectArena, CK_OBJECT_HANDLE,
- OBJECT_STACK_SIZE);
nssList_Add(objectList, objectStack);
+ objectStackSize = objectStackSize * 2;
+ objectStack = nss_ZNEWARRAY(objectArena, CK_OBJECT_HANDLE,
+ objectStackSize);
+ if (objectStack == NULL) {
+ count =0;
+ break;
+ /* return what we can */
+ }
} else {
break;
}
@@ -249,20 +256,22 @@ traverse_objects_by_template
}
if (objectList) {
nssListIterator *objects;
+ CK_OBJECT_HANDLE *localStack;
objects = nssList_CreateIterator(objectList);
- for (objectStack = (CK_OBJECT_HANDLE *)nssListIterator_Start(objects);
- objectStack != NULL;
- objectStack = (CK_OBJECT_HANDLE *)nssListIterator_Next(objects)) {
- for (i=0; i<count; i++) {
- cbrv = (*callback)(tok, session, objectStack[i], arg);
+ objectStackSize = OBJECT_STACK_SIZE;
+ for (localStack = (CK_OBJECT_HANDLE *)nssListIterator_Start(objects);
+ localStack != NULL;
+ localStack = (CK_OBJECT_HANDLE *)nssListIterator_Next(objects)) {
+ for (i=0; i< objectStackSize; i++) {
+ cbrv = (*callback)(tok, session, localStack[i], arg);
}
+ objectStackSize = objectStackSize * 2;
}
nssListIterator_Finish(objects);
nssListIterator_Destroy(objects);
- count = OBJECT_STACK_SIZE;
}
for (i=0; i<count; i++) {
- cbrv = (*callback)(tok, session, startOS[i], arg);
+ cbrv = (*callback)(tok, session, objectStack[i], arg);
}
if (objectArena)
NSSArena_Destroy(objectArena);