From 8a4981d8aa01512faeffb0e96a03504efe1383da Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Mon, 26 Mar 2012 06:58:16 -0700 Subject: [PATCH] ITS#7213 fix page_split with MDB_APPEND don't skip the cursor adjust checks --- libraries/libmdb/mdb.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 25080f3..e69dcf5 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];