summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2014-09-30 10:17:05 +0100
committerPedro Alvarez <pedro.alvarez@codethink.co.uk>2014-10-02 14:48:28 +0100
commit9b8eca5826cf32c790bbb1e1f8836dc1754a4ef9 (patch)
tree709c979a3147ef83f3b6179204fdc79798f67295
parent626adf0eb70e059de498a01ab66864a45128c935 (diff)
downloaddefinitions-9b8eca5826cf32c790bbb1e1f8836dc1754a4ef9.tar.gz
xfer-hole: Fix bug in copy_slice_from_file.
os.read is limited to an int in size. copy_slice_from_file was trying to os.read more than that causing an OverflowError.
-rwxr-xr-xxfer-hole10
1 files changed, 8 insertions, 2 deletions
diff --git a/xfer-hole b/xfer-hole
index 0d4cee7a..22ee06bf 100755
--- a/xfer-hole
+++ b/xfer-hole
@@ -120,8 +120,14 @@ def make_xfer_instructions(fd):
def copy_slice_from_file(to, fd, start, end):
safe_lseek(fd, start, os.SEEK_SET)
- data = os.read(fd, end - start)
- to.write(data)
+ nbytes = end - start
+ max_at_a_time = 1024**2
+ while nbytes > 0:
+ data = os.read(fd, min(nbytes, max_at_a_time))
+ if not data:
+ break
+ to.write(data)
+ nbytes -= len(data)
for kind, start, end in make_xfer_instructions(fd):