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): ...@@ -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)
......
...@@ -685,7 +685,18 @@ class TestMaildir(TestMailbox): ...@@ -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):
......
...@@ -45,6 +45,9 @@ Library ...@@ -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.
......
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