From ce6d302c0a2b0e6e46d975dcf81ff5e3cd028c28 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 735de653c6..26a6373c30 100644 --- a/servers/slapd/back-mdb/idl.c +++ b/servers/slapd/back-mdb/idl.c @@ -625,9 +625,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 { -- 2.47.3