]> git.sur5r.net Git - openldap/blobdiff - libraries/liblmdb/mdb.c
ITS#8334 Fix MDB_APPENDDUP vs. rewrite(single item)
[openldap] / libraries / liblmdb / mdb.c
index fa0c9e5b9ccd1f2ba6df9daba40bcf3258eee3aa..e6bae4f8612241e574972cd2110f35a191a1381e 100644 (file)
@@ -5279,7 +5279,11 @@ mdb_page_search_root(MDB_cursor *mc, MDB_val *key, int flags)
                indx_t          i;
 
                DPRINTF(("branch page %"Z"u has %u keys", mp->mp_pgno, NUMKEYS(mp)));
-               mdb_cassert(mc, NUMKEYS(mp) > 1);
+               /* Don't assert on branch pages in the FreeDB. We can get here
+                * while in the process of rebalancing a FreeDB branch page; we must
+                * let that proceed. ITS#8336
+                */
+               mdb_cassert(mc, !mc->mc_dbi || NUMKEYS(mp) > 1);
                DPRINTF(("found index 0 to page %"Z"u", NODEPGNO(NODEPTR(mp, 0))));
 
                if (flags & (MDB_PS_FIRST|MDB_PS_LAST)) {
@@ -6487,7 +6491,7 @@ more:
 #endif
                                /* does data match? */
                                if (!dcmp(data, &olddata)) {
-                                       if (flags & MDB_NODUPDATA)
+                                       if (flags & (MDB_NODUPDATA|MDB_APPENDDUP))
                                                return MDB_KEYEXIST;
                                        /* overwrite it */
                                        goto current;