]> git.sur5r.net Git - openldap/commitdiff
Import ITS#2039 index corruption fix from HEAD
authorHoward Chu <hyc@openldap.org>
Fri, 23 Aug 2002 22:09:40 +0000 (22:09 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 23 Aug 2002 22:09:40 +0000 (22:09 +0000)
servers/slapd/back-ldbm/idl.c

index 176f780e4273b39f1e8a0d8d136a1fbff5d61fc6..1ee4a5c13a9fcf70dccd91fd8490a3bec0d7fe05 100644 (file)
@@ -48,17 +48,26 @@ static void cont_free( Datum *cont )
 #ifdef LDBM_DEBUG_IDL
 static void idl_check(ID_BLOCK *idl)
 {
-       int i;
+       int i, max;
        ID_BLOCK last;
 
-       if( ID_BLOCK_INDIRECT(idl) || ID_BLOCK_ALLIDS(idl)
-               || ID_BLOCK_NIDS(idl) <= 1 )
+       if( ID_BLOCK_ALLIDS(idl) )
        {
                return;
        }
+       if( ID_BLOCK_INDIRECT(idl) )
+       {
+               for ( max = 0; ID_BLOCK_ID(idl, max) != NOID; max++ ) ;
+       } else
+       {
+               max = ID_BLOCK_NIDS(idl);
+       }
+
+       if (max <= 1)
+               return;
 
        for( last = ID_BLOCK_ID(idl, 0), i = 1;
-               i < ID_BLOCK_NIDS(idl);
+               i < max;
                last = ID_BLOCK_ID(idl, i), i++ )
        {
                assert (last < ID_BLOCK_ID(idl, i) );
@@ -526,7 +535,7 @@ idl_insert_key(
                if ( !first && !ID_BLOCK_NOID(idl, i + 1) ) {
                        /* read it in */
                        cont_alloc( &k2, &key );
-                       cont_id( &k2, ID_BLOCK_ID(idl, i) );
+                       cont_id( &k2, ID_BLOCK_ID(idl, i + 1) );
                        if ( (tmp2 = idl_fetch_one( be, db, k2 )) == NULL ) {
                                Debug( LDAP_DEBUG_ANY,
                                    "idl_insert_key: idl_fetch_one returned NULL\n",