X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fattr.c;h=bb4b4ca6062e464c3d7a54be8088c1340b777b59;hb=19838fe2ef8161be435454490284baf98d73df88;hp=d0738ed01a43da4c6f3cdb19c6eeb965e8d63abd;hpb=88c039607518e62d035ab7479c8a31970ba85977;p=openldap diff --git a/servers/slapd/attr.c b/servers/slapd/attr.c index d0738ed01a..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 */ ; @@ -129,13 +129,17 @@ attr_dup( Attribute *a ) 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;