[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:
Andrew M. Kuchling 2005-06-07 19:36:10 +00:00
parent eb2608415e
commit ecdad8575e
2 changed files with 19 additions and 0 deletions

View File

@ -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()

View File

@ -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: