From: Andrew M. Kuchling Date: Sat, 14 Jul 2007 22:06:30 +0000 (+0000) Subject: [Backport of r56382] X-Git-Tag: v2.5.2c1~233 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6ecd4a0535580bc12b062a39ab8288b18e87daad;p=python [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. --- diff --git a/Lib/mailbox.py b/Lib/mailbox.py index 3e5d0b4e10..46f41ce802 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 18e6b67742..57e44f436c 100644 --- a/Lib/test/test_mailbox.py +++ b/Lib/test/test_mailbox.py @@ -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): diff --git a/Misc/NEWS b/Misc/NEWS index 91e58430f0..e88fb2aebc 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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.