X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fidl.c;h=dbcc8f41b7a18eb96df3ff9112b39b427be4a0c5;hb=b0b3eff457f0e431c4fd094d3d9cfeb6383df91d;hp=79f55a6ffbf8e5d0af7a90d5ed62e77be592320b;hpb=31a4149f02e5fd3086897d2de8ef06fb6d3653db;p=openldap diff --git a/servers/slapd/back-ldbm/idl.c b/servers/slapd/back-ldbm/idl.c index 79f55a6ffb..dbcc8f41b7 100644 --- a/servers/slapd/back-ldbm/idl.c +++ b/servers/slapd/back-ldbm/idl.c @@ -1,8 +1,17 @@ /* idl.c - ldap id list handling routines */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ #include "portable.h" @@ -553,14 +562,13 @@ idl_insert_key( #ifndef USE_INDIRECT_NIDS /* 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 */ #else i = idl_find(idl, id); - if (ID_BLOCK_ID(idl, i) < id) + if (ID_BLOCK_ID(idl, i) <= id) i++; #endif - if ( i != 0 ) { i--; first = 0; @@ -568,6 +576,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) );