/* $OpenLDAP$ */
/*
- * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
if( retoidp != NULL ) *retoidp = NULL;
if( retdatap != NULL ) *retdatap = NULL;
- ber = ber_dup( res->lm_ber );
-
if ( ld->ld_error ) {
LDAP_FREE( ld->ld_error );
ld->ld_error = NULL;
ld->ld_matched = NULL;
}
+ ber = ber_dup( res->lm_ber );
+
+ if ( ber == NULL ) {
+ ld->ld_errno = LDAP_NO_MEMORY;
+ return ld->ld_errno;
+ }
+
rc = ber_scanf( ber, "{iaa" /*}*/, &errcode,
&ld->ld_matched, &ld->ld_error );
if( tag == LDAP_TAG_REFERRAL ) {
/* skip over referral */
- tag = ber_scanf( ber, "x" );
-
- if( tag != LBER_ERROR ) {
- tag = ber_peek_tag( ber, &len );
+ if( ber_scanf( ber, "x" ) == LBER_ERROR ) {
+ ld->ld_errno = LDAP_DECODING_ERROR;
+ ber_free( ber, 0 );
+ return ld->ld_errno;
}
+
+ tag = ber_peek_tag( ber, &len );
}
if( tag == LDAP_TAG_EXOP_RES_OID ) {
}
}
+ ber_free( ber, 0 );
+
if( retoidp != NULL ) {
*retoidp = resoid;
} else {