X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fattr.c;h=bb4b4ca6062e464c3d7a54be8088c1340b777b59;hb=19838fe2ef8161be435454490284baf98d73df88;hp=7042d18c2b38f4e7a4cc0df377755101800e877c;hpb=db5b055eaf2f19e3f0d9a8f6a100c2df4d3533ed;p=openldap diff --git a/servers/slapd/attr.c b/servers/slapd/attr.c index 7042d18c2b..bb4b4ca606 100644 --- a/servers/slapd/attr.c +++ b/servers/slapd/attr.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -111,7 +111,7 @@ attr_dup( Attribute *a ) tmp = attr_alloc( a->a_desc ); if ( a->a_vals != NULL ) { - int i; + int i; for ( i = 0; !BER_BVISNULL( &a->a_vals[i] ); i++ ) { /* EMPTY */ ; @@ -126,16 +126,20 @@ attr_dup( Attribute *a ) BER_BVZERO( &tmp->a_vals[i] ); /* a_nvals must be non null; it may be equal to a_vals */ - assert( a->a_nvals ); + assert( a->a_nvals != NULL ); if ( a->a_nvals != a->a_vals ) { + int j; + tmp->a_nvals = ch_malloc( (i + 1) * sizeof(struct berval) ); - for ( i = 0; !BER_BVISNULL( &a->a_nvals[i] ); i++ ) { - ber_dupbv( &tmp->a_nvals[i], &a->a_nvals[i] ); - if ( BER_BVISNULL( &tmp->a_nvals[i] ) ) break; + for ( j = 0; !BER_BVISNULL( &a->a_nvals[j] ); j++ ) { + assert( j < i ); + ber_dupbv( &tmp->a_nvals[j], &a->a_nvals[j] ); + if ( BER_BVISNULL( &tmp->a_nvals[j] ) ) break; /* FIXME: error? */ } - BER_BVZERO( &tmp->a_nvals[i] ); + assert( j == i ); + BER_BVZERO( &tmp->a_nvals[j] ); } else { tmp->a_nvals = tmp->a_vals;