mdbx: backport - catch mdb_cursor_sibling() error (ITS#7377).

Change-Id: I440ff1f9f92156e19935195d656f4d77b088f605
This commit is contained in:
Hallvard Furuseth 2016-12-10 22:00:31 +01:00 committed by Leo Yuriev
parent fca2f4d929
commit 3627145129

8
mdb.c
View File

@ -8678,7 +8678,6 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
split_indx = newindx; split_indx = newindx;
nkeys = 0; nkeys = 0;
} else { } else {
split_indx = (nkeys+1) / 2; split_indx = (nkeys+1) / 2;
if (IS_LEAF2(rp)) { if (IS_LEAF2(rp)) {
@ -8838,7 +8837,7 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
} else { } else {
/* find right page's left sibling */ /* find right page's left sibling */
mc->mc_ki[ptop] = mn.mc_ki[ptop]; mc->mc_ki[ptop] = mn.mc_ki[ptop];
mdb_cursor_sibling(mc, 0); rc = mdb_cursor_sibling(mc, 0);
} }
} }
} else { } else {
@ -8846,8 +8845,11 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
rc = mdb_node_add(&mn, mn.mc_ki[ptop], &sepkey, NULL, rp->mp_pgno, 0); rc = mdb_node_add(&mn, mn.mc_ki[ptop], &sepkey, NULL, rp->mp_pgno, 0);
mn.mc_top++; mn.mc_top++;
} }
if (unlikely(rc != MDB_SUCCESS)) if (unlikely(rc != MDB_SUCCESS)) {
if (rc == MDB_NOTFOUND) /* improper mdb_cursor_sibling() result */
rc = MDB_PROBLEM;
goto done; goto done;
}
if (nflags & MDB_APPEND) { if (nflags & MDB_APPEND) {
mc->mc_pg[mc->mc_top] = rp; mc->mc_pg[mc->mc_top] = rp;
mc->mc_ki[mc->mc_top] = 0; mc->mc_ki[mc->mc_top] = 0;