Commit 5b18a710 authored by Jim Fulton's avatar Jim Fulton

Fixed: FileStorage loadBefore didn't handle deleted/undone data correctly.

parent 6fe36b98
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
- DemoStorage: add support for conflict resolution and fix history() - DemoStorage: add support for conflict resolution and fix history()
https://github.com/zopefoundation/ZODB/pull/58 https://github.com/zopefoundation/ZODB/pull/58
- Fixed: FileStorage loadBefore didn't handle deleted/undone data correctly.
4.2.0 (2015-06-02) 4.2.0 (2015-06-02)
================== ==================
......
...@@ -489,11 +489,13 @@ class FileStorage( ...@@ -489,11 +489,13 @@ class FileStorage(
if not pos: if not pos:
return None return None
if h.back: if h.plen:
return _file.read(h.plen), h.tid, end_tid
elif h.back:
data, _, _, _ = self._loadBack_impl(oid, h.back, _file=_file) data, _, _, _ = self._loadBack_impl(oid, h.back, _file=_file)
return data, h.tid, end_tid return data, h.tid, end_tid
else: else:
return _file.read(h.plen), h.tid, end_tid raise POSKeyError(oid)
def store(self, oid, oldserial, data, version, transaction): def store(self, oid, oldserial, data, version, transaction):
if self._is_read_only: if self._is_read_only:
......
...@@ -179,6 +179,10 @@ class TransactionalUndoStorage: ...@@ -179,6 +179,10 @@ class TransactionalUndoStorage:
info = self._storage.undoInfo() info = self._storage.undoInfo()
self._undo(info[2]['id'], [oid]) self._undo(info[2]['id'], [oid])
self.assertRaises(KeyError, self._storage.load, oid, '') self.assertRaises(KeyError, self._storage.load, oid, '')
# Loading current data via loadBefore should raise a POSKeyError too:
self.assertRaises(KeyError, self._storage.loadBefore, oid,
b'\x7f\xff\xff\xff\xff\xff\xff\xff')
self._iterate() self._iterate()
def checkUndoCreationBranch2(self): def checkUndoCreationBranch2(self):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment