From a77767013a7cc60bd22ef598ebf5c6e7021bba88 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Sun, 7 Jul 2013 17:14:38 +0200 Subject: [PATCH] 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. --- libraries/liblmdb/mdb.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 7647ea3..96ac952 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; } }