summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew M. Kuchling <amk@amk.ca>2007-07-14 21:56:19 (GMT)
committerAndrew M. Kuchling <amk@amk.ca>2007-07-14 21:56:19 (GMT)
commit2b09ef0c6d8db26ff6c6c10d94130936b11783da (patch)
tree916681a97a36efe246bc07a86aa2ec91551cf6c2
parent6111ce36670d79055d0e357acf246ded39f84529 (diff)
downloadcpython-2b09ef0c6d8db26ff6c6c10d94130936b11783da.zip
cpython-2b09ef0c6d8db26ff6c6c10d94130936b11783da.tar.gz
cpython-2b09ef0c6d8db26ff6c6c10d94130936b11783da.tar.bz2
Avoid exception if there's a stray directory inside a Maildir folder.
The Maildir specification doesn't seem to say anything about this situation, and it can happen if you're keeping a Maildir mailbox in Subversion (.svn directories) or some similar system. The patch just ignores directories in the cur/, new/, tmp/ folders.
-rwxr-xr-xLib/mailbox.py6
-rw-r--r--Lib/test/test_mailbox.py13
2 files changed, 17 insertions, 2 deletions
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index 520afeb..3f7a12a 100755
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -459,7 +459,11 @@ class Maildir(Mailbox):
"""Update table of contents mapping."""
self._toc = {}
for subdir in ('new', 'cur'):
- for entry in os.listdir(os.path.join(self._path, subdir)):
+ subdir_path = os.path.join(self._path, subdir)
+ for entry in os.listdir(subdir_path):
+ p = os.path.join(subdir_path, entry)
+ if os.path.isdir(p):
+ continue
uniq = entry.split(self.colon)[0]
self._toc[uniq] = os.path.join(subdir, entry)
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 175c291..684aeb2 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -686,7 +686,18 @@ class TestMaildir(TestMailbox):
folder1_alias = box.get_folder('folder1')
self.assert_(folder1_alias._factory is dummy_factory)
-
+ def test_directory_in_folder (self):
+ # Test that mailboxes still work if there's a stray extra directory
+ # in a folder.
+ for i in range(10):
+ self._box.add(mailbox.Message(_sample_message))
+
+ # Create a stray directory
+ os.mkdir(os.path.join(self._path, 'cur', 'stray-dir'))
+
+ # Check that looping still works with the directory present.
+ for msg in self._box:
+ pass
class _TestMboxMMDF(TestMailbox):