[Bug #1172763] dumbdbm uses eval() on lines, so it chokes if there's an extra \r on the end of a line; fixed by stripping off trailing whitespace.
This commit is contained in:
parent
eb2608415e
commit
ecdad8575e
|
@ -81,6 +81,7 @@ class _Database(UserDict.DictMixin):
|
|||
pass
|
||||
else:
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
key, pos_and_siz_pair = eval(line)
|
||||
self._index[key] = pos_and_siz_pair
|
||||
f.close()
|
||||
|
|
|
@ -74,6 +74,24 @@ class DumbDBMTestCase(unittest.TestCase):
|
|||
self.assertEqual(f['1'], 'hello2')
|
||||
f.close()
|
||||
|
||||
def test_line_endings(self):
|
||||
# test for bug #1172763: dumbdbm would die if the line endings
|
||||
# weren't what was expected.
|
||||
f = dumbdbm.open(_fname)
|
||||
f['1'] = 'hello'
|
||||
f['2'] = 'hello2'
|
||||
f.close()
|
||||
|
||||
# Mangle the file by adding \r before each newline
|
||||
data = open(_fname + '.dir').read()
|
||||
data = data.replace('\n', '\r\n')
|
||||
open(_fname + '.dir', 'wb').write(data)
|
||||
|
||||
f = dumbdbm.open(_fname)
|
||||
self.assertEqual(f['1'], 'hello')
|
||||
self.assertEqual(f['2'], 'hello2')
|
||||
|
||||
|
||||
def read_helper(self, f):
|
||||
keys = self.keys_helper(f)
|
||||
for key in self._dict:
|
||||
|
|
Loading…
Reference in New Issue