Kaydet (Commit) 6ecd4a05 authored tarafından Andrew M. Kuchling's avatar Andrew M. Kuchling

[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.
üst 03368707
......@@ -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)
......
......@@ -685,7 +685,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):
......
......@@ -45,6 +45,9 @@ Library
- Fix bug in marshal where bad data would cause a segfault due to
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
the traceback inadvertently or maliciously closing the comment and
injecting HTML into the error page.
......
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