From 4bb44991757226b80fd321f194b2d6fe8a1a533d Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Sun, 27 Dec 1998 03:55:57 +0000 Subject: [PATCH] Plug some memory leaks --- servers/slapd/add.c | 7 ++++++- servers/slapd/back-ldbm/delete.c | 1 + servers/slapd/back-ldbm/filterindex.c | 9 ++++++--- servers/slapd/entry.c | 7 +++++-- servers/slapd/main.c | 1 + 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/servers/slapd/add.c b/servers/slapd/add.c index 0f497a0d73..6e9541b4ee 100644 --- a/servers/slapd/add.c +++ b/servers/slapd/add.c @@ -71,6 +71,7 @@ do_add( Connection *conn, Operation *op ) if ( ber_scanf( ber, "{a{V}}", &type, &vals ) == LBER_ERROR ) { send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL, "decoding error" ); + free( dn ); entry_free( e ); return; } @@ -80,6 +81,8 @@ do_add( Connection *conn, Operation *op ) 0, 0 ); send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL, NULL ); + free( type ); + free( dn ); entry_free( e ); return; } @@ -98,7 +101,9 @@ do_add( Connection *conn, Operation *op ) * appropriate one, or send a referral to our "referral server" * if we don't hold it. */ - if ( (be = select_backend( dn )) == NULL ) { + be = select_backend( dn ); + free( dn ); + if ( be == NULL ) { entry_free( e ); send_ldap_result( conn, op, LDAP_PARTIAL_RESULTS, NULL, default_referral ); diff --git a/servers/slapd/back-ldbm/delete.c b/servers/slapd/back-ldbm/delete.c index 64723229f9..2072e2bfd8 100644 --- a/servers/slapd/back-ldbm/delete.c +++ b/servers/slapd/back-ldbm/delete.c @@ -67,6 +67,7 @@ ldbm_back_delete( /* XXX delete from parent's id2children entry XXX */ pdn = dn_parent( be, dn ); p = dn2entry_r( be, pdn, &matched ); + free( pdn ); if ( id2children_remove( be, p, e ) != 0 ) { send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "","" ); goto error_return; diff --git a/servers/slapd/back-ldbm/filterindex.c b/servers/slapd/back-ldbm/filterindex.c index 31d9551e17..21a9d6ef7c 100644 --- a/servers/slapd/back-ldbm/filterindex.c +++ b/servers/slapd/back-ldbm/filterindex.c @@ -30,7 +30,7 @@ filter_candidates( Filter *f ) { - IDList *result; + IDList *result, *tmp1, *tmp2; Debug( LDAP_DEBUG_TRACE, "=> filter_candidates\n", 0, 0, 0 ); @@ -78,8 +78,11 @@ filter_candidates( case LDAP_FILTER_NOT: Debug( LDAP_DEBUG_FILTER, "\tNOT\n", 0, 0, 0 ); - result = idl_notin( be, idl_allids( be ), filter_candidates( be, - f->f_not ) ); + tmp1 = idl_allids( be ); + tmp2 = filter_candidates( be, f->f_not ); + result = idl_notin( be, tmp1, tmp2 ); + idl_free( tmp2 ); + idl_free( tmp1 ); break; } diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index 726eaf675f..67cc85833e 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -47,8 +47,6 @@ str2entry( char *s ) s ? s : "NULL", 0, 0 ); e = (Entry *) ch_calloc( 1, sizeof(Entry) ); - /* initialize reader/writer lock */ - entry_rdwr_init(e); /* check to see if there's an id included */ next = s; @@ -58,10 +56,14 @@ str2entry( char *s ) Debug( LDAP_DEBUG_TRACE, "<= str2entry NULL (missing newline after id)\n", 0, 0, 0 ); + free( e ); return( NULL ); } } + /* initialize reader/writer lock */ + entry_rdwr_init(e); + /* dn + attributes */ e->e_attrs = NULL; vals[0] = &bval; @@ -101,6 +103,7 @@ str2entry( char *s ) != 0 ) { Debug( LDAP_DEBUG_TRACE, "<= str2entry NULL (attr_merge)\n", 0, 0, 0 ); + entry_free( e ); return( NULL ); } nvals++; diff --git a/servers/slapd/main.c b/servers/slapd/main.c index e17b7c2f76..57ecbe44f2 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -273,6 +273,7 @@ main( int argc, char **argv ) /* log and send error */ Debug( LDAP_DEBUG_ANY, "ber_get_int returns 0x%lx\n", tag, 0, 0 ); + ber_free( &ber, 1 ); return 1; } -- 2.39.5