From: Hallvard Furuseth Date: Sun, 7 Jul 2013 15:14:38 +0000 (+0200) Subject: ITS#7515 Reject conflicting page versions. X-Git-Tag: OPENLDAP_REL_ENG_2_4_36~32^2~26 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=a77767013a7cc60bd22ef598ebf5c6e7021bba88;p=openldap ITS#7515 Reject conflicting page versions. If mdb_page_touch() sees a page in txn's dirty_list, that is the page version txn's cursors should have. Fail if the user may be seeing and depending on another version. --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 7647ea3e34..96ac9521f2 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -1560,9 +1560,10 @@ mdb_page_touch(MDB_cursor *mc) if (dl[0].mid) { unsigned x = mdb_mid2l_search(dl, pgno); if (x <= dl[0].mid && dl[x].mid == pgno) { - np = dl[x].mptr; - if (mp != np) - mc->mc_pg[mc->mc_top] = np; + if (mp != dl[x].mptr) { /* bad cursor? */ + mc->mc_flags &= ~(C_INITIALIZED|C_EOF); + return MDB_CORRUPTED; + } return 0; } }