Commit 456fe5d3 authored by Guido van Rossum's avatar Guido van Rossum

Fix a weird use of try/finally to close a file.

(There are more places that don't close 'f' at all if an error occurs,
but none have a bogus try/finally pattern.)
parent b358a2c4
...@@ -29,86 +29,83 @@ class MmapTests(unittest.TestCase): ...@@ -29,86 +29,83 @@ class MmapTests(unittest.TestCase):
f.write(b'\0'* (PAGESIZE-3) ) f.write(b'\0'* (PAGESIZE-3) )
f.flush() f.flush()
m = mmap.mmap(f.fileno(), 2 * PAGESIZE) m = mmap.mmap(f.fileno(), 2 * PAGESIZE)
finally:
f.close() f.close()
# Simple sanity checks # Simple sanity checks
tp = str(type(m)) # SF bug 128713: segfaulted on Linux tp = str(type(m)) # SF bug 128713: segfaulted on Linux
self.assertEqual(m.find('foo'), PAGESIZE) self.assertEqual(m.find('foo'), PAGESIZE)
self.assertEqual(len(m), 2*PAGESIZE) self.assertEqual(len(m), 2*PAGESIZE)
self.assertEqual(m[0], b'\0') self.assertEqual(m[0], b'\0')
self.assertEqual(m[0:3], b'\0\0\0') self.assertEqual(m[0:3], b'\0\0\0')
# Modify the file's content # Modify the file's content
m[0] = b'3' m[0] = b'3'
m[PAGESIZE +3: PAGESIZE +3+3] = b'bar' m[PAGESIZE +3: PAGESIZE +3+3] = b'bar'
# Check that the modification worked # Check that the modification worked
self.assertEqual(m[0], b'3') self.assertEqual(m[0], b'3')
self.assertEqual(m[0:3], b'3\0\0') self.assertEqual(m[0:3], b'3\0\0')
self.assertEqual(m[PAGESIZE-1 : PAGESIZE + 7], b'\0foobar\0') self.assertEqual(m[PAGESIZE-1 : PAGESIZE + 7], b'\0foobar\0')
m.flush() m.flush()
# Test doing a regular expression match in an mmap'ed file # Test doing a regular expression match in an mmap'ed file
match = re.search('[A-Za-z]+', m) match = re.search('[A-Za-z]+', m)
if match is None: if match is None:
self.fail('regex match on mmap failed!') self.fail('regex match on mmap failed!')
else: else:
start, end = match.span(0) start, end = match.span(0)
length = end - start length = end - start
self.assertEqual(start, PAGESIZE) self.assertEqual(start, PAGESIZE)
self.assertEqual(end, PAGESIZE + 6) self.assertEqual(end, PAGESIZE + 6)
# test seeking around (try to overflow the seek implementation) # test seeking around (try to overflow the seek implementation)
m.seek(0,0) m.seek(0,0)
self.assertEqual(m.tell(), 0) self.assertEqual(m.tell(), 0)
m.seek(42,1) m.seek(42,1)
self.assertEqual(m.tell(), 42) self.assertEqual(m.tell(), 42)
m.seek(0,2) m.seek(0,2)
self.assertEqual(m.tell(), len(m)) self.assertEqual(m.tell(), len(m))
# Try to seek to negative position... # Try to seek to negative position...
self.assertRaises(ValueError, m.seek, -1) self.assertRaises(ValueError, m.seek, -1)
# Try to seek beyond end of mmap... # Try to seek beyond end of mmap...
self.assertRaises(ValueError, m.seek, 1, 2) self.assertRaises(ValueError, m.seek, 1, 2)
# Try to seek to negative position... # Try to seek to negative position...
self.assertRaises(ValueError, m.seek, -len(m)-1, 2) self.assertRaises(ValueError, m.seek, -len(m)-1, 2)
# Try resizing map # Try resizing map
try:
m.resize(512)
except SystemError:
# resize() not supported
# No messages are printed, since the output of this test suite
# would then be different across platforms.
pass
else:
# resize() is supported
self.assertEqual(len(m), 512)
# Check that we can no longer seek beyond the new size.
self.assertRaises(ValueError, m.seek, 513, 0)
# Check that the underlying file is truncated too
# (bug #728515)
f = open(TESTFN)
try: try:
m.resize(512)
except SystemError:
# resize() not supported
# No messages are printed, since the output of this test suite
# would then be different across platforms.
pass
else:
# resize() is supported
self.assertEqual(len(m), 512)
# Check that we can no longer seek beyond the new size.
self.assertRaises(ValueError, m.seek, 513, 0)
# Check that the underlying file is truncated too
# (bug #728515)
f = open(TESTFN)
f.seek(0, 2) f.seek(0, 2)
self.assertEqual(f.tell(), 512) self.assertEqual(f.tell(), 512)
finally:
f.close() f.close()
self.assertEqual(m.size(), 512) self.assertEqual(m.size(), 512)
m.close() m.close()
finally:
try:
f.close()
except OSError:
pass
def test_access_parameter(self): def test_access_parameter(self):
# Test for "access" keyword parameter # Test for "access" keyword parameter
......
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