Skip to content

Commit 82ea540

Browse files
committed
refuse negative offset in write chunk and add test case for it.
git-svn-id: svn+ssh://svn.code.sf.net/p/migrid/code/trunk@6038 b75ad72c-e7d7-11dd-a971-7dbc132099af
1 parent 27825d2 commit 82ea540

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

mig/shared/fileio.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ def _write_chunk(path, chunk, offset, logger=None, mode='r+b',
8080
logger = null_logger("dummy")
8181
# logger.debug("writing chunk to %r at offset %d" % (path, offset))
8282

83+
if offset < 0:
84+
logger.error("cannot write to negative offset %d in %r" %
85+
(offset, path))
86+
return False
87+
8388
# create dir and file if it does not exists
8489

8590
(head, _) = os.path.split(path)

tests/test_mig_shared_fileio.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010

1111
import mig.shared.fileio as fileio
1212

13-
DUMMY_BYTES = binascii.unhexlify('DEADBEEF') # 4 bytes
13+
DUMMY_BYTES = binascii.unhexlify('DEADBEEF') # 4 bytes
1414
DUMMY_BYTES_LENGTH = 4
1515
DUMMY_FILE_WRITECHUNK = 'fileio/write_chunk'
1616
DUMMY_FILE_WRITEFILE = 'fileio/write_file'
1717

1818
assert isinstance(DUMMY_BYTES, bytes)
1919

20+
2021
class MigSharedFileio__write_chunk(MigTestCase):
2122
def setUp(self):
2223
super(MigSharedFileio__write_chunk, self).setUp()
@@ -27,6 +28,11 @@ def test_return_false_on_invalid_data(self):
2728
did_succeed = fileio.write_chunk(self.tmp_path, 1234, 0, self.logger)
2829
self.assertFalse(did_succeed)
2930

31+
def test_return_false_on_invalid_offset(self):
32+
did_succeed = fileio.write_chunk(self.tmp_path, DUMMY_BYTES, -42,
33+
self.logger)
34+
self.assertFalse(did_succeed)
35+
3036
def test_return_false_on_invalid_dir(self):
3137
os.makedirs(self.tmp_path)
3238

@@ -55,7 +61,8 @@ def test_store_bytes_at_offset(self):
5561
with open(self.tmp_path, 'rb') as file:
5662
content = file.read(1024)
5763
self.assertEqual(len(content), DUMMY_BYTES_LENGTH + offset)
58-
self.assertEqual(content[0:3], bytearray([0, 0, 0]), "expected a hole was left")
64+
self.assertEqual(content[0:3], bytearray([0, 0, 0]),
65+
"expected a hole was left")
5966
self.assertEqual(content[3:], DUMMY_BYTES)
6067

6168

@@ -76,7 +83,8 @@ def test_return_false_on_invalid_dir(self):
7683
self.assertFalse(did_succeed)
7784

7885
def test_return_false_on_missing_dir(self):
79-
did_succeed = fileio.write_file(DUMMY_BYTES, self.tmp_path, self.logger, make_parent=False)
86+
did_succeed = fileio.write_file(DUMMY_BYTES, self.tmp_path, self.logger,
87+
make_parent=False)
8088
self.assertFalse(did_succeed)
8189

8290
def test_creates_directory(self):

0 commit comments

Comments
 (0)