Commit 98f27b3a authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

ITS#1169, plug -lldap result leaks

parent 1327aa26
OpenLDAP 1.x Change Log OpenLDAP 1.x Change Log
Changes included in OpenLDAP 1.2.12 Changes included in OpenLDAP 1.2.12 Engineering
CVS Tag: OPENLDAP_REL_ENG_1_2 CVS Tag: OPENLDAP_REL_ENG_1_2
Fixed libldap result error memory leak (ITS#1161)
Changes included in OpenLDAP 1.2.12
CVS Tag: OPENLDAP_REL_ENG_1_2_12
Fixed slapd sb_max_incoming bug Fixed slapd sb_max_incoming bug
Fixed ldapmodify ldaphost NULL bug Fixed ldapmodify ldaphost NULL bug
Fixed ldapsearch uninitialized fp bug Fixed ldapsearch uninitialized fp bug
......
...@@ -280,22 +280,24 @@ read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb, ...@@ -280,22 +280,24 @@ read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
ldap_set_ber_options( ld, &ber ); ldap_set_ber_options( ld, &ber );
/* get the next message */ /* get the next message */
if ( (tag = ber_get_next( sb, &len, &ber )) if ( (tag = ber_get_next( sb, &len, &ber )) != LDAP_TAG_MESSAGE ) {
!= LDAP_TAG_MESSAGE ) { ld->ld_errno = (tag == LBER_DEFAULT)
ld->ld_errno = (tag == LBER_DEFAULT ? LDAP_SERVER_DOWN : ? LDAP_SERVER_DOWN
LDAP_LOCAL_ERROR); : LDAP_LOCAL_ERROR;
free( ber.ber_buf );
return( -1 ); return( -1 );
} }
/* message id */ /* message id */
if ( ber_get_int( &ber, &id ) == LBER_ERROR ) { if ( ber_get_int( &ber, &id ) == LBER_ERROR ) {
ld->ld_errno = LDAP_DECODING_ERROR; ld->ld_errno = LDAP_DECODING_ERROR;
free( ber.ber_buf );
return( -1 ); return( -1 );
} }
/* if it's been abandoned, toss it */ /* if it's been abandoned, toss it */
if ( ldap_abandoned( ld, (int)id ) ) { if ( ldap_abandoned( ld, (int)id ) ) {
free( ber.ber_buf ); /* gack! */ free( ber.ber_buf );
return( -2 ); /* continue looking */ return( -2 ); /* continue looking */
} }
...@@ -304,7 +306,7 @@ read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb, ...@@ -304,7 +306,7 @@ read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"no request for response with msgid %ld (tossing)\n", "no request for response with msgid %ld (tossing)\n",
id, 0, 0 ); id, 0, 0 );
free( ber.ber_buf ); /* gack! */ free( ber.ber_buf );
return( -2 ); /* continue looking */ return( -2 ); /* continue looking */
} }
Debug( LDAP_DEBUG_TRACE, "got %s msgid %ld, original id %d\n", Debug( LDAP_DEBUG_TRACE, "got %s msgid %ld, original id %d\n",
...@@ -316,6 +318,7 @@ read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb, ...@@ -316,6 +318,7 @@ read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
/* the message type */ /* the message type */
if ( (tag = ber_peek_tag( &ber, &len )) == LBER_ERROR ) { if ( (tag = ber_peek_tag( &ber, &len )) == LBER_ERROR ) {
ld->ld_errno = LDAP_DECODING_ERROR; ld->ld_errno = LDAP_DECODING_ERROR;
free( ber.ber_buf );
return( -1 ); return( -1 );
} }
...@@ -372,7 +375,7 @@ Debug( LDAP_DEBUG_TRACE, ...@@ -372,7 +375,7 @@ Debug( LDAP_DEBUG_TRACE,
simple_request = ( hadref ? 0 : 1 ); simple_request = ( hadref ? 0 : 1 );
} else { } else {
/* request with referrals or child request */ /* request with referrals or child request */
free( ber.ber_buf ); /* gack! */ free( ber.ber_buf );
ber.ber_buf = NULL; ber.ber_buf = NULL;
} }
...@@ -416,7 +419,7 @@ lr->lr_res_matched ? lr->lr_res_matched : "" ); ...@@ -416,7 +419,7 @@ lr->lr_res_matched ? lr->lr_res_matched : "" );
} }
if ( ber.ber_buf == NULL ) { if ( ber.ber_buf == NULL ) {
return( rc ); return rc;
} }
#endif /* LDAP_REFERRALS */ #endif /* LDAP_REFERRALS */
...@@ -424,6 +427,7 @@ lr->lr_res_matched ? lr->lr_res_matched : "" ); ...@@ -424,6 +427,7 @@ lr->lr_res_matched ? lr->lr_res_matched : "" );
if ( (new = (LDAPMessage *) calloc( 1, sizeof(LDAPMessage) )) if ( (new = (LDAPMessage *) calloc( 1, sizeof(LDAPMessage) ))
== NULL ) { == NULL ) {
ld->ld_errno = LDAP_NO_MEMORY; ld->ld_errno = LDAP_NO_MEMORY;
free( ber.ber_buf );
return( -1 ); return( -1 );
} }
new->lm_msgid = (int)id; new->lm_msgid = (int)id;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment