--- libraries/liblber/decode.c 2001/05/06 19:53:57 1.34.6.7 +++ libraries/liblber/decode.c 2001/11/06 16:49:17 1.34.6.8 @@ -1,5 +1,5 @@ /* decode.c - ber input decoding routines */ -/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.34.6.6 2000/10/12 19:52:39 kurt Exp $ */ +/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.34.6.7 2001/05/06 19:53:57 kurt Exp $ */ /* * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file @@ -585,9 +585,17 @@ ber_scanf ( BerElement *ber, tag != LBER_DEFAULT && rc != LBER_DEFAULT; tag = ber_next_element( ber, &len, last ) ) { + void *save = *sss; + *sss = (char **) LBER_REALLOC( *sss, (j + 2) * sizeof(char *) ); + if( *sss == NULL ) { + LBER_FREE( save ); + rc = LBER_DEFAULT; + goto breakout; + } + rc = ber_get_stringa( ber, &((*sss)[j]) ); j++; } @@ -603,9 +611,17 @@ ber_scanf ( BerElement *ber, tag != LBER_DEFAULT && rc != LBER_DEFAULT; tag = ber_next_element( ber, &len, last ) ) { + void *save = *bv; + *bv = (struct berval **) LBER_REALLOC( *bv, (j + 2) * sizeof(struct berval *) ); + if( *bv == NULL ) { + LBER_FREE( save ); + rc = LBER_DEFAULT; + goto breakout; + } + rc = ber_get_stringal( ber, &((*bv)[j]) ); j++; } @@ -639,6 +655,7 @@ ber_scanf ( BerElement *ber, } } +breakout: va_end( ap ); if ( rc == LBER_DEFAULT ) {