From: Howard Chu Date: Wed, 12 Mar 2003 13:42:29 +0000 (+0000) Subject: ITS#2348 fix from HEAD X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2FOPENLDAP_REL_ENG_2;p=thirdparty%2Fopenldap.git ITS#2348 fix from HEAD --- diff --git a/servers/slapd/back-ldbm/idl.c b/servers/slapd/back-ldbm/idl.c index 64c1cc7087..d87dfa7ee4 100644 --- a/servers/slapd/back-ldbm/idl.c +++ b/servers/slapd/back-ldbm/idl.c @@ -478,15 +478,9 @@ idl_insert_key( */ /* select the block to try inserting into *//* XXX linear search XXX */ - for ( i = 0; !ID_BLOCK_NOID(idl, i) && id > ID_BLOCK_ID(idl, i); i++ ) + for ( i = 0; !ID_BLOCK_NOID(idl, i) && id >= ID_BLOCK_ID(idl, i); i++ ) ; /* NULL */ - /* The ID already exists in the IDL, no insert needed */ - if ( ID_BLOCK_ID( idl, i ) == id ) { - idl_free( idl ); - return 0; - } - if ( i != 0 ) { i--; first = 0; @@ -494,6 +488,11 @@ idl_insert_key( first = 1; } + /* At this point the following condition must be true: + * ID_BLOCK_ID(idl, i) <= id && id < ID_BLOCK_ID(idl, i+1) + * except when i is the first or the last block. + */ + /* get the block */ cont_alloc( &k2, &key ); cont_id( &k2, ID_BLOCK_ID(idl, i) );