summaryrefslogtreecommitdiff
path: root/Mailman/Handlers
diff options
context:
space:
mode:
authorMark Sapiro2007-11-06 18:03:28 -0800
committerMark Sapiro2007-11-06 18:03:28 -0800
commit0296d8c1952340eed18e6105d68925ae42579c93 (patch)
tree8b16d3158ed63831562c45303ba3213249e918fa /Mailman/Handlers
parent85473d738ce8ec53ac518819832e0babc3558cf2 (diff)
downloadmailman-0296d8c1952340eed18e6105d68925ae42579c93.tar.gz
mailman-0296d8c1952340eed18e6105d68925ae42579c93.tar.zst
mailman-0296d8c1952340eed18e6105d68925ae42579c93.zip
- Scrubber.py
Fixed an issue where an implicit text/plain part without any headers gets lost. Moved the cleansing of the filename extension to a place where it is guaranteed to be a string as opposed to an empty list.
Diffstat (limited to 'Mailman/Handlers')
-rw-r--r--Mailman/Handlers/Scrubber.py11
1 files changed, 6 insertions, 5 deletions
diff --git a/Mailman/Handlers/Scrubber.py b/Mailman/Handlers/Scrubber.py
index bb607b1d2..2acec6caa 100644
--- a/Mailman/Handlers/Scrubber.py
+++ b/Mailman/Handlers/Scrubber.py
@@ -46,7 +46,7 @@ from Mailman.i18n import _
# Path characters for common platforms
pre = re.compile(r'[/\\:]')
# All other characters to strip out of Content-Disposition: filenames
-# (essentially anything that isn't an alphanum, dot, slash, or underscore.
+# (essentially anything that isn't an alphanum, dot, dash, or underscore).
sre = re.compile(r'[^-\w.]')
# Regexp to strip out leading dots
dre = re.compile(r'^\.*')
@@ -265,7 +265,7 @@ URL: %(url)s
# If the message isn't a multipart, then we'll strip it out as an
# attachment that would have to be separately downloaded. Pipermail
# will transform the url into a hyperlink.
- elif part and not part.is_multipart():
+ elif part._payload and not part.is_multipart():
payload = part.get_payload(decode=True)
ctype = part.get_content_type()
# XXX Under email 2.5, it is possible that payload will be None.
@@ -313,7 +313,8 @@ URL: %(url)s
charsets = []
for part in msg.walk():
# TK: bug-id 1099138 and multipart
- if not part or part.is_multipart():
+ # MAS test payload - if part may fail if there are no headers.
+ if not part._payload or part.is_multipart():
continue
# All parts should be scrubbed to text/plain by now.
partctype = part.get_content_type()
@@ -410,8 +411,6 @@ def save_attachment(mlist, msg, dir, filter_html=True):
ext = fnext or guess_extension(ctype, fnext)
else:
ext = guess_extension(ctype, fnext)
- # Allow only alphanumerics, dash, underscore, and dot
- ext = sre.sub('', ext)
if not ext:
# We don't know what it is, so assume it's just a shapeless
# application/octet-stream, unless the Content-Type: is
@@ -421,6 +420,8 @@ def save_attachment(mlist, msg, dir, filter_html=True):
ext = '.txt'
else:
ext = '.bin'
+ # Allow only alphanumerics, dash, underscore, and dot
+ ext = sre.sub('', ext)
path = None
# We need a lock to calculate the next attachment number
with Lock(os.path.join(fsdir, 'attachments.lock')):