From a7771fc35a840b8241ddb05b632d6492941170a0 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Thu, 2 Dec 2010 13:18:32 +0000 Subject: [PATCH] ITS#6732: Clean up ber_errno handling. Set it after ber_mem(c)alloc_x failure. Don't set it when not needed. --- libraries/liblber/memory.c | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/libraries/liblber/memory.c b/libraries/liblber/memory.c index 96001061fc..8712031dc5 100644 --- a/libraries/liblber/memory.c +++ b/libraries/liblber/memory.c @@ -201,9 +201,10 @@ ber_memalloc_x( ber_len_t s, void *ctx ) if( ber_int_memory_fns == NULL || ctx == NULL ) { #ifdef LDAP_MEMORY_DEBUG - struct ber_mem_hdr *mh = malloc(s + sizeof(struct ber_mem_hdr) + sizeof( ber_int_t)); - if( mh == NULL ) return NULL; - + new = malloc(s + sizeof(struct ber_mem_hdr) + sizeof( ber_int_t)); + if( new ) + { + struct ber_mem_hdr *mh = new; mh->bm_top = LBER_MEM_JUNK; mh->bm_length = s; setdatatop( mh); @@ -222,6 +223,7 @@ ber_memalloc_x( ber_len_t s, void *ctx ) BER_MEM_VALID( &mh[1] ); new = &mh[1]; + } #else new = malloc( s ); #endif @@ -254,9 +256,10 @@ ber_memcalloc_x( ber_len_t n, ber_len_t s, void *ctx ) if( ber_int_memory_fns == NULL || ctx == NULL ) { #ifdef LDAP_MEMORY_DEBUG - struct ber_mem_hdr *mh = calloc(1, - (n * s) + sizeof(struct ber_mem_hdr) + sizeof(ber_int_t) ); - if( mh == NULL ) return NULL; + new = calloc(1, n*s + sizeof(struct ber_mem_hdr) + sizeof(ber_int_t)); + if( new ) + { + struct ber_mem_hdr *mh = new; mh->bm_top = LBER_MEM_JUNK; mh->bm_length = n*s; @@ -273,6 +276,7 @@ ber_memcalloc_x( ber_len_t n, ber_len_t s, void *ctx ) #endif BER_MEM_VALID( &mh[1] ); new = &mh[1]; + } #else new = calloc( n, s ); #endif @@ -487,7 +491,6 @@ ber_dupbv_x( new = dst; } else { if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; return NULL; } } @@ -499,7 +502,6 @@ ber_dupbv_x( } if(( new->bv_val = ber_memalloc_x( src->bv_len + 1, ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; if ( !dst ) ber_memfree_x( new, ctx ); return NULL; @@ -542,7 +544,6 @@ ber_str2bv_x( new = bv; } else { if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; return NULL; } } @@ -550,7 +551,6 @@ ber_str2bv_x( new->bv_len = len ? len : strlen( s ); if ( dup ) { if ( (new->bv_val = ber_memalloc_x( new->bv_len+1, ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; if ( !bv ) ber_memfree_x( new, ctx ); return NULL; @@ -588,7 +588,6 @@ ber_mem2bv_x( new = bv; } else { if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; return NULL; } } @@ -596,7 +595,6 @@ ber_mem2bv_x( new->bv_len = len; if ( dup ) { if ( (new->bv_val = ber_memalloc_x( new->bv_len+1, ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; if ( !bv ) { ber_memfree_x( new, ctx ); } @@ -635,13 +633,10 @@ ber_strdup_x( LDAP_CONST char *s, void *ctx ) } len = strlen( s ) + 1; - - if ( (p = ber_memalloc_x( len, ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; - return NULL; + if ( (p = ber_memalloc_x( len, ctx )) != NULL ) { + AC_MEMCPY( p, s, len ); } - AC_MEMCPY( p, s, len ); return p; } @@ -677,14 +672,11 @@ ber_strndup_x( LDAP_CONST char *s, ber_len_t l, void *ctx ) } len = ber_strnlen( s, l ); - - if ( (p = ber_memalloc_x( len + 1, ctx )) == NULL ) { - ber_errno = LBER_ERROR_MEMORY; - return NULL; + if ( (p = ber_memalloc_x( len + 1, ctx )) != NULL ) { + AC_MEMCPY( p, s, len ); + p[len] = '\0'; } - AC_MEMCPY( p, s, len ); - p[len] = '\0'; return p; } -- 2.39.5