mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-31 16:36:20 +00:00
immutable: when storage server reads from immutable share, don't try to read past the end of the file (Python allocates space according to the amount of data requested, so if there is corruption and that number is huge it will do a huge memory allocation)
This commit is contained in:
parent
de4269a643
commit
53b28c1650
@ -135,9 +135,17 @@ class ShareFile:
|
||||
|
||||
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?
|
||||
f = open(self.home, 'rb')
|
||||
f.seek(self._data_offset+offset)
|
||||
return f.read(length)
|
||||
seekpos = self._data_offset+offset
|
||||
fsize = os.path.getsize(self.home)
|
||||
actuallength = min(0, length, fsize-seekpos)
|
||||
if actuallength == 0:
|
||||
return ""
|
||||
f.seek(seekpos)
|
||||
return f.read(actuallength)
|
||||
|
||||
def write_share_data(self, offset, data):
|
||||
length = len(data)
|
||||
|
Loading…
x
Reference in New Issue
Block a user