From 08cc1f4fb149251ec73e22b62bcba8b8ccfdbbc4 Mon Sep 17 00:00:00 2001 From: "nelson%bolyard.com" Date: Mon, 15 Mar 2010 08:29:31 +0000 Subject: [PATCH] Bug 505880: nss_ZRealloc could use a local NSSArena *arena variable to make coverity happy Patch contributed by Timeless , r=nelson git-svn-id: svn://10.0.0.236/trunk@259984 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/security/nss/lib/base/arena.c | 28 ++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/mozilla/security/nss/lib/base/arena.c b/mozilla/security/nss/lib/base/arena.c index 023dbe75fce..aa46c431e29 100644 --- a/mozilla/security/nss/lib/base/arena.c +++ b/mozilla/security/nss/lib/base/arena.c @@ -35,7 +35,7 @@ * ***** END LICENSE BLOCK ***** */ #ifdef DEBUG -static const char CVS_ID[] = "@(#) $RCSfile: arena.c,v $ $Revision: 1.12 $ $Date: 2008-05-13 01:22:35 $"; +static const char CVS_ID[] = "@(#) $RCSfile: arena.c,v $ $Revision: 1.13 $ $Date: 2010-03-15 08:29:31 $"; #endif /* DEBUG */ /* @@ -1026,6 +1026,7 @@ nss_ZRealloc PRUint32 newSize ) { + NSSArena *arena; struct pointer_header *h, *new_h; PRUint32 my_newSize = newSize + sizeof(struct pointer_header); void *rv; @@ -1051,7 +1052,8 @@ nss_ZRealloc return pointer; } - if( (NSSArena *)NULL == h->arena ) { + arena = h->arena; + if (!arena) { /* Heap */ new_h = (struct pointer_header *)PR_Calloc(1, my_newSize); if( (struct pointer_header *)NULL == new_h ) { @@ -1080,22 +1082,22 @@ nss_ZRealloc void *p; /* Arena */ #ifdef NSSDEBUG - if( PR_SUCCESS != nssArena_verifyPointer(h->arena) ) { + if (PR_SUCCESS != nssArena_verifyPointer(arena)) { return (void *)NULL; } #endif /* NSSDEBUG */ - if( (PRLock *)NULL == h->arena->lock ) { + if (!arena->lock) { /* Just got destroyed.. so this pointer is invalid */ nss_SetError(NSS_ERROR_INVALID_POINTER); return (void *)NULL; } - PR_Lock(h->arena->lock); + PR_Lock(arena->lock); #ifdef ARENA_THREADMARK - if( (PRThread *)NULL != h->arena->marking_thread ) { - if( PR_GetCurrentThread() != h->arena->marking_thread ) { - PR_Unlock(h->arena->lock); + if (arena->marking_thread) { + if (PR_GetCurrentThread() != arena->marking_thread) { + PR_Unlock(arena->lock); nss_SetError(NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD); return (void *)NULL; } @@ -1117,19 +1119,19 @@ nss_ZRealloc */ char *extra = &((char *)pointer)[ newSize ]; (void)nsslibc_memset(extra, 0, (h->size - newSize)); - PR_Unlock(h->arena->lock); + PR_Unlock(arena->lock); return pointer; } - PR_ARENA_ALLOCATE(p, &h->arena->pool, my_newSize); + PR_ARENA_ALLOCATE(p, &arena->pool, my_newSize); if( (void *)NULL == p ) { - PR_Unlock(h->arena->lock); + PR_Unlock(arena->lock); nss_SetError(NSS_ERROR_NO_MEMORY); return (void *)NULL; } new_h = (struct pointer_header *)p; - new_h->arena = h->arena; + new_h->arena = arena; new_h->size = newSize; rv = (void *)((char *)new_h + sizeof(struct pointer_header)); if (rv != pointer) { @@ -1139,7 +1141,7 @@ nss_ZRealloc (void)nsslibc_memset(&((char *)rv)[ h->size ], 0, (newSize - h->size)); h->arena = (NSSArena *)NULL; h->size = 0; - PR_Unlock(new_h->arena->lock); + PR_Unlock(arena->lock); return rv; } /*NOTREACHED*/