From: Howard Chu Date: Mon, 26 Mar 2012 13:58:16 +0000 (-0700) Subject: ITS#7213 fix page_split with MDB_APPEND X-Git-Tag: OPENLDAP_REL_ENG_2_4_32~125^2~29 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8a4981d8aa01512faeffb0e96a03504efe1383da;p=openldap ITS#7213 fix page_split with MDB_APPEND don't skip the cursor adjust checks --- diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 25080f3f21..e69dcf5522 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -5665,7 +5665,10 @@ newsep: if (nflags & MDB_APPEND) { mc->mc_pg[mc->mc_top] = rp; mc->mc_ki[mc->mc_top] = 0; - return mdb_node_add(mc, 0, newkey, newdata, newpgno, nflags); + rc = mdb_node_add(mc, 0, newkey, newdata, newpgno, nflags); + if (rc) + return rc; + goto done; } if (IS_LEAF2(rp)) { goto done; @@ -5772,10 +5775,11 @@ done: if (!(m3->mc_flags & C_INITIALIZED)) continue; if (new_root) { + int k; /* root split */ - for (i=m3->mc_top; i>0; i--) { - m3->mc_ki[i+1] = m3->mc_ki[i]; - m3->mc_pg[i+1] = m3->mc_pg[i]; + for (k=m3->mc_top; k>=0; k--) { + m3->mc_ki[k+1] = m3->mc_ki[k]; + m3->mc_pg[k+1] = m3->mc_pg[k]; } m3->mc_ki[0] = mc->mc_ki[0]; m3->mc_pg[0] = mc->mc_pg[0];