[Backport of r56382]

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.
This commit is contained in:
Andrew M. Kuchling 2007-07-14 22:06:30 +00:00
parent 0336870720
commit 6ecd4a0535
3 changed files with 19 additions and 1 deletions

View file

@ -459,7 +459,11 @@ class Maildir(Mailbox):
"""Update table of contents mapping.""" """Update table of contents mapping."""
self._toc = {} self._toc = {}
for subdir in ('new', 'cur'): 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] uniq = entry.split(self.colon)[0]
self._toc[uniq] = os.path.join(subdir, entry) self._toc[uniq] = os.path.join(subdir, entry)

View file

@ -685,7 +685,18 @@ class TestMaildir(TestMailbox):
folder1_alias = box.get_folder('folder1') folder1_alias = box.get_folder('folder1')
self.assert_(folder1_alias._factory is dummy_factory) 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): class _TestMboxMMDF(TestMailbox):

View file

@ -45,6 +45,9 @@ Library
- Fix bug in marshal where bad data would cause a segfault due to - Fix bug in marshal where bad data would cause a segfault due to
lack of an infinite recursion check. lack of an infinite recursion check.
- mailbox.py: Ignore stray directories found in Maildir's cur/new/tmp
subdirectories.
- HTML-escape the plain traceback in cgitb's HTML output, to prevent - HTML-escape the plain traceback in cgitb's HTML output, to prevent
the traceback inadvertently or maliciously closing the comment and the traceback inadvertently or maliciously closing the comment and
injecting HTML into the error page. injecting HTML into the error page.