lmdb-safe icon indicating copy to clipboard operation
lmdb-safe copied to clipboard

iter_t operators ++ and -- have some out-of-bounds issues

Open mzealey opened this issue 5 years ago • 0 comments

If you look up a record using lower_bound and it is after the last key in the database; you can get a crash when trying to read or seek via the iterator (i cant remember which I did that caused the crash). You need to handle the -- case a bit like the patch I made here: https://github.com/PowerDNS/pdns/commit/0844062224f43eac67a1c53ab3dee7420b453466#diff-562825383c4b03c7c0504a94cfc4d2abR388

There is a similar issue with ++, but it is slightly harder to solve as a SET_RANGE will always return the next record ie it would only get into this state as the result of a -- and I'm not sure if it would do that even then - need to look at the lmdb docs. Lets say you were on the first record of the iterator and you -- it, I'm guessing d_end goes to true but you are actually at the beginning rather than the end. I think you probably need to keep track of both states and do a MDB_FIRST type lookup, blanking a d_before_first type flag...

mzealey avatar Jul 07 '19 18:07 mzealey