]> granicus.if.org Git - python/commitdiff
[Bug #1172763] dumbdbm uses eval() on lines, so it chokes if there's an extra \r...
authorAndrew M. Kuchling <amk@amk.ca>
Tue, 7 Jun 2005 19:36:10 +0000 (19:36 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Tue, 7 Jun 2005 19:36:10 +0000 (19:36 +0000)
Lib/dumbdbm.py
Lib/test/test_dumbdbm.py

index b85844dc611a8c86245b402f4d1a42c902082ed0..84a766589082a7f055b6e126080bfdbb0a5fe74e 100644 (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()
index 12df673eaa485956cd6f69d1f36f2ad4ca0ae776..d320110b90793635bc1cc17010508e5b59e2a4f7 100644 (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: