--- libraries/liblber/decode.c 1999/11/08 14:43:12 1.41 +++ libraries/liblber/decode.c 1999/11/08 18:36:30 1.42 @@ -1,5 +1,5 @@ /* decode.c - ber input decoding routines */ -/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.40 1999/11/08 14:39:00 kdz Exp $ */ +/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.39 1999/10/19 16:57:39 kdz Exp $ */ /* * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file @@ -135,21 +135,23 @@ ber_peek_tag( BerElement *ber_in, ber_len_t *len ) { - char* save; + ber_tag_t tag; BerElement *ber; - ber_tag_t tag; assert( ber_in != NULL ); assert( BER_VALID( ber_in ) ); - /* save state */ - save = ber->ber_ptr; + ber = ber_dup( ber_in ); - tag = ber_skip_tag( ber, len ); + if( ber == NULL ) { + return LBER_ERROR; + } - /* restore state */ - ber->ber_ptr = save; + assert( BER_VALID( ber ) ); + tag = ber_skip_tag( ber, len ); + + ber_free( ber, 0 ); return( tag ); } @@ -451,7 +453,8 @@ ber_first_element( /* skip the sequence header, use the len to mark where to stop */ if ( ber_skip_tag( ber, len ) == LBER_DEFAULT ) { - return( LBER_ERROR ); + *last = NULL; + return( LBER_DEFAULT ); } *last = ber->ber_ptr + *len; @@ -476,7 +479,6 @@ ber_next_element( assert( BER_VALID( ber ) ); if ( ber->ber_ptr == last ) { - /* set last to NULL on end of SEQUENCE */ return( LBER_DEFAULT ); }