diff options
author | relyea%netscape.com <devnull@localhost> | 2002-02-13 02:26:47 +0000 |
---|---|---|
committer | relyea%netscape.com <devnull@localhost> | 2002-02-13 02:26:47 +0000 |
commit | 41bff38bb601cf178f07228344297eaca9f59007 (patch) | |
tree | b00e491052a0bcabcde4b2c381df38b1293743aa | |
parent | 485184c5ae72bc31aa5c3c36932878d516486a4f (diff) | |
download | nss-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.c | 2 | ||||
-rw-r--r-- | security/nss/lib/ckfw/builtins/bfind.c | 6 | ||||
-rw-r--r-- | security/nss/lib/ckfw/instance.c | 4 |
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 ) { |