def read_share_data(self, offset, length):
precondition(offset >= 0)
# reads beyond the end of the data are truncated. Reads that start
- # beyond the end of the data return an empty string. I wonder why
- # Python doesn't do the following computation for me?
+ # beyond the end of the data return an empty string.
seekpos = self._data_offset+offset
- fsize = os.path.getsize(self.home)
- actuallength = max(0, min(length, fsize-seekpos))
+ actuallength = max(0, min(length, self._lease_offset-seekpos))
if actuallength == 0:
return ""
f = open(self.home, 'rb')
{ "maximum-immutable-share-size": remaining_space,
"tolerates-immutable-read-overrun": True,
"delete-mutable-shares-with-zero-length-writev": True,
+ "prevents-read-past-end-of-share-data": True,
},
"application-version": str(allmydata.__full_version__),
}