diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2005-06-07 19:57:01 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2005-06-07 19:57:01 (GMT) |
commit | 997b36271e50196cc59aee18a46cc8ccfb0f866a (patch) | |
tree | c26a50b93674d385172aa073c6c2e83a22016200 | |
parent | 3c8f5ebc0cafe385552d9d89685b4c8d554898de (diff) | |
download | cpython-997b36271e50196cc59aee18a46cc8ccfb0f866a.zip cpython-997b36271e50196cc59aee18a46cc8ccfb0f866a.tar.gz cpython-997b36271e50196cc59aee18a46cc8ccfb0f866a.tar.bz2 |
[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.
-rw-r--r-- | Lib/dumbdbm.py | 1 | ||||
-rw-r--r-- | Lib/test/test_dumbdbm.py | 18 |
2 files changed, 19 insertions, 0 deletions
diff --git a/Lib/dumbdbm.py b/Lib/dumbdbm.py index b85844d..84a7665 100644 --- a/Lib/dumbdbm.py +++ b/Lib/dumbdbm.py @@ -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() diff --git a/Lib/test/test_dumbdbm.py b/Lib/test/test_dumbdbm.py index 12df673..d320110 100644 --- a/Lib/test/test_dumbdbm.py +++ b/Lib/test/test_dumbdbm.py @@ -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: |