Kaydet (Commit) 17fb5079 authored tarafından Martin v. Löwis's avatar Martin v. Löwis

Treat empty dat/dir pairs as dumbdbm. Fixes #744687.

üst 8316feb1
......@@ -45,7 +45,12 @@ for name in anydbm._names:
def test_whichdb_name(self, name=name, mod=mod):
# Check whether whichdb correctly guesses module name
# for databases opened with module mod.
# Try with empty files first
f = mod.open(_fname, 'c')
f.close()
self.assertEqual(name, whichdb.whichdb(_fname))
# Now add a key
f = mod.open(_fname, 'w')
f["1"] = "1"
f.close()
self.assertEqual(name, whichdb.whichdb(_fname))
......
......@@ -50,15 +50,19 @@ def whichdb(filename):
# Check for dumbdbm next -- this has a .dir and and a .dat file
try:
f = open(filename + os.extsep + "dat", "rb")
f.close()
# First check for presence of files
sizes = os.stat(filename + os.extsep + "dat").st_size, \
os.stat(filename + os.extsep + "dir").st_size
# dumbdbm files with no keys are empty
if sizes == (0, 0):
return "dumbdbm"
f = open(filename + os.extsep + "dir", "rb")
try:
if f.read(1) in ["'", '"']:
return "dumbdbm"
finally:
f.close()
except IOError:
except (OSError, IOError):
pass
# See if the file exists, return None if not
......
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