summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrelyea%netscape.com <devnull@localhost>2002-02-13 02:26:47 +0000
committerrelyea%netscape.com <devnull@localhost>2002-02-13 02:26:47 +0000
commit41bff38bb601cf178f07228344297eaca9f59007 (patch)
treeb00e491052a0bcabcde4b2c381df38b1293743aa
parent485184c5ae72bc31aa5c3c36932878d516486a4f (diff)
downloadnss-hg-41bff38bb601cf178f07228344297eaca9f59007.tar.gz
Bug 120651: Memory leaks in PK11_GetCertList.
1) Fix leaks in error paths (bfind.c -- found by inspection). 2) Don't allocate hash table data out of the arena. PL_Hash grows and shrinks the hash buckets as necessary. In arenas they will just grow. 3) Don't allocate temparary locks out of the global instance arena pool.
-rw-r--r--security/nss/lib/base/hashops.c2
-rw-r--r--security/nss/lib/ckfw/builtins/bfind.c6
-rw-r--r--security/nss/lib/ckfw/instance.c4
3 files changed, 6 insertions, 6 deletions
diff --git a/security/nss/lib/base/hashops.c b/security/nss/lib/base/hashops.c
index 074e0d93a..031f92649 100644
--- a/security/nss/lib/base/hashops.c
+++ b/security/nss/lib/base/hashops.c
@@ -52,7 +52,7 @@ nss_arena_hash_alloc_table
PRSize size
)
{
- NSSArena *arena = (NSSArena *)pool;
+ NSSArena *arena = (NSSArena *)NULL;
#ifdef NSSDEBUG
if( (void *)NULL != arena ) {
diff --git a/security/nss/lib/ckfw/builtins/bfind.c b/security/nss/lib/ckfw/builtins/bfind.c
index 87cb91cbc..17b94fa15 100644
--- a/security/nss/lib/ckfw/builtins/bfind.c
+++ b/security/nss/lib/ckfw/builtins/bfind.c
@@ -71,6 +71,7 @@ builtins_mdFindObjects_Final
nss_ZFreeIf(fo->objs);
nss_ZFreeIf(fo);
+ nss_ZFreeIf(mdFindObjects);
if ((NSSArena *)NULL != arena) {
NSSArena_Destroy(arena);
}
@@ -221,7 +222,7 @@ nss_builtins_FindObjectsInit
}
fo->objs = nss_ZNEWARRAY(arena, builtinsInternalObject *, fo->n);
- if( (builtinsInternalObject **)NULL == temp ) {
+ if( (builtinsInternalObject **)NULL == fo->objs ) {
*pError = CKR_HOST_MEMORY;
goto loser;
}
@@ -236,6 +237,9 @@ nss_builtins_FindObjectsInit
nss_ZFreeIf(temp);
nss_ZFreeIf(fo);
nss_ZFreeIf(rv);
+ if ((NSSArena *)NULL != arena) {
+ NSSArena_Destroy(arena);
+ }
return (NSSCKMDFindObjects *)NULL;
}
diff --git a/security/nss/lib/ckfw/instance.c b/security/nss/lib/ckfw/instance.c
index 4d5769258..02a73e224 100644
--- a/security/nss/lib/ckfw/instance.c
+++ b/security/nss/lib/ckfw/instance.c
@@ -489,10 +489,6 @@ nssCKFWInstance_CreateMutex
}
#endif /* NSSDEBUG */
- if( (NSSArena *)NULL == arena ) {
- arena = fwInstance->arena;
- }
-
mutex = nssCKFWMutex_Create(fwInstance->pInitArgs, arena, pError);
if( (NSSCKFWMutex *)NULL == mutex ) {
if( CKR_OK == *pError ) {