From b0d73083719f39a4a4f9664ce57208f7c29017db Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 13 Aug 2020 18:17:45 +0100 Subject: [PATCH] ITS#9135 fix index error on collapsed range --- servers/slapd/back-mdb/idl.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/servers/slapd/back-mdb/idl.c b/servers/slapd/back-mdb/idl.c index b81ac84163..f7663167ed 100644 --- a/servers/slapd/back-mdb/idl.c +++ b/servers/slapd/back-mdb/idl.c @@ -642,9 +642,30 @@ mdb_idl_delete_keys( } if ( lo2 >= hi2 ) { /* The range has collapsed... */ - rc = mdb_cursor_del( cursor, MDB_NODUPDATA ); + /* delete the range marker */ + rc = mdb_cursor_del( cursor, 0 ); if ( rc != 0 ) { - err = "c_del dup"; + err = "c_del dup1"; + goto fail; + } + /* skip past deleted marker */ + rc = mdb_cursor_get( cursor, &key, &data, MDB_NEXT_DUP ); + if ( rc != 0 ) { + err = "c_get dup1"; + goto fail; + } + /* delete the requested id */ + if ( id == hi ) { + /* skip lo */ + rc = mdb_cursor_get( cursor, &key, &data, MDB_NEXT_DUP ); + if ( rc != 0 ) { + err = "c_get dup2"; + goto fail; + } + } + rc = mdb_cursor_del( cursor, 0 ); + if ( rc != 0 ) { + err = "c_del dup2"; goto fail; } } else {