diff options
author | Mark Sapiro <msapiro@value.net> | 2007-11-06 17:41:17 -0800 |
---|---|---|
committer | Mark Sapiro <msapiro@value.net> | 2007-11-06 17:41:17 -0800 |
commit | 111095a6a719f4f155081def5615e1174c36e2ca (patch) | |
tree | 9cff6f1163dac263b2fac6c4267e47c7219d80c8 /Mailman | |
parent | 86384d9dc64e7e39e0c4c05847e15299dc6f9684 (diff) | |
download | mailman2-111095a6a719f4f155081def5615e1174c36e2ca.tar.gz mailman2-111095a6a719f4f155081def5615e1174c36e2ca.tar.xz mailman2-111095a6a719f4f155081def5615e1174c36e2ca.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')
-rw-r--r-- | Mailman/Handlers/Scrubber.py | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Mailman/Handlers/Scrubber.py b/Mailman/Handlers/Scrubber.py index 48660038..588dd9ac 100644 --- a/Mailman/Handlers/Scrubber.py +++ b/Mailman/Handlers/Scrubber.py @@ -45,7 +45,7 @@ from Mailman.Logging.Syslog import syslog # 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'^\.*') @@ -298,7 +298,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_type() # XXX Under email 2.5, it is possible that payload will be None. @@ -349,7 +349,8 @@ URL: %(url)s text = [] 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() @@ -447,8 +448,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 @@ -458,6 +457,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 lockfile = os.path.join(fsdir, 'attachments.lock') |