]> git.sur5r.net Git - openldap/commitdiff
Tweak cursor_next C_EOF check
authorHoward Chu <hyc@openldap.org>
Wed, 11 Jan 2017 10:33:28 +0000 (10:33 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 11 Jan 2017 10:33:28 +0000 (10:33 +0000)
Allow C_EOF flag to be stale

libraries/liblmdb/mdb.c

index c30a96f4c6d40b9b033024177be93cfa3bdf1d09..c84afef4ddffdbd2bc08ff450f5cb6887ba145e7 100644 (file)
@@ -6596,15 +6596,17 @@ mdb_cursor_next(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op)
        MDB_node        *leaf;
        int rc;
 
-       if ((mc->mc_flags & C_EOF) ||
-               ((mc->mc_flags & C_DEL) && op == MDB_NEXT_DUP)) {
+       if ((mc->mc_flags & C_DEL && op == MDB_NEXT_DUP))
                return MDB_NOTFOUND;
-       }
+
        if (!(mc->mc_flags & C_INITIALIZED))
                return mdb_cursor_first(mc, key, data);
 
        mp = mc->mc_pg[mc->mc_top];
 
+       if ((mc->mc_flags & C_EOF) && mc->mc_ki[mc->mc_top] >= NUMKEYS(mp)-1)
+               return MDB_NOTFOUND;
+
        if (mc->mc_db->md_flags & MDB_DUPSORT) {
                leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]);
                if (F_ISSET(leaf->mn_flags, F_DUPDATA)) {