]> git.sur5r.net Git - openldap/commitdiff
Clean up build_result_ber error handling.
authorKurt Zeilenga <kurt@openldap.org>
Fri, 11 Jun 1999 18:48:34 +0000 (18:48 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Fri, 11 Jun 1999 18:48:34 +0000 (18:48 +0000)
libraries/libldap/result.c

index 8fa906c57a280009dbc24fbcaf18ecd8cc3491b9..5f9ff57cecf54c7826d90b7a5d2ab29882daaead 100644 (file)
@@ -540,9 +540,11 @@ build_result_ber( LDAP *ld, BerElement **bp, LDAPRequest *lr )
        long            along;
        BerElement *ber;
 
-       ber = *bp = ldap_alloc_ber_with_options( ld );
+       *bp = NULL;
+       ber = ldap_alloc_ber_with_options( ld );
 
        if( ber == NULL ) {
+               ld->ld_errno = LDAP_NO_MEMORY;
                return LBER_ERROR;
        }
 
@@ -552,6 +554,7 @@ build_result_ber( LDAP *ld, BerElement **bp, LDAPRequest *lr )
            lr->lr_res_error ? lr->lr_res_error : "" ) == -1 ) {
 
                ld->ld_errno = LDAP_ENCODING_ERROR;
+               ber_free(ber, 1);
                return( LBER_ERROR );
        }
 
@@ -559,11 +562,13 @@ build_result_ber( LDAP *ld, BerElement **bp, LDAPRequest *lr )
 
        if ( ber_skip_tag( ber, &len ) == LBER_ERROR ) {
                ld->ld_errno = LDAP_DECODING_ERROR;
+               ber_free(ber, 1);
                return( LBER_ERROR );
        }
 
        if ( ber_get_int( ber, &along ) == LBER_ERROR ) {
                ld->ld_errno = LDAP_DECODING_ERROR;
+               ber_free(ber, 1);
                return( LBER_ERROR );
        }
 
@@ -571,9 +576,11 @@ build_result_ber( LDAP *ld, BerElement **bp, LDAPRequest *lr )
 
        if ( tag == LBER_ERROR ) {
                ld->ld_errno = LDAP_DECODING_ERROR;
+               ber_free(ber, 1);
                return( LBER_ERROR );
        }
 
+       *bp = ber;
        return tag;
 }