Barry Warsaw pushed to branch master at mailman / Mailman
Commits: aed50db4 by Mark Sapiro at 2015-10-29T22:23:30Z Fixes for issue #147 Multiple "Re:" in subject. - - - - - a4ef7fec by Barry Warsaw at 2015-10-29T22:36:55Z Collapse multiple ``Re:`` in Subject headers. Given by Mark Sapiro. (Closes: #147) - - - - - 8b9a6f2d by Barry Warsaw at 2015-10-29T22:47:29Z Collapse multiple ``Re:`` in Subject headers. Given by Mark Sapiro. (Closes: #147) - - - - - 3 changed files: - src/mailman/docs/NEWS.rst - src/mailman/handlers/docs/subject-munging.rst - src/mailman/handlers/subject_prefix.py Changes: ===================================== src/mailman/docs/NEWS.rst ===================================== --- a/src/mailman/docs/NEWS.rst +++ b/src/mailman/docs/NEWS.rst @@ -40,6 +40,8 @@ Bugs * Core no longer depends on the standalone `mock` module. (Closes: #146) * The logging of moderation reasons has been fixed. Given by Aurélien Bompard. + * Collapse multiple ``Re:`` in Subject headers. Given by Mark Sapiro. + (Closes: #147) Configuration ------------- ===================================== src/mailman/handlers/docs/subject-munging.rst ===================================== --- a/src/mailman/handlers/docs/subject-munging.rst +++ b/src/mailman/handlers/docs/subject-munging.rst @@ -83,6 +83,20 @@ where it will stay. >>> print(msg['subject']) [XTest] Re: Something important +Sometimes the incoming ``Subject`` header has a pathological sequence of +``Re:`` like markers. These should all be collapsed up to the first non-``Re:`` +marker. + + >>> msg = message_from_string("""\ + ... From: aper...@example.com + ... Subject: [XTest] Re: RE : Re: Re: Re: Re: Re: Something important + ... + ... A message of great import. + ... """) + >>> process(mlist, msg, {}) + >>> print(msg['subject']) + [XTest] Re: Something important + Internationalized headers ========================= @@ -207,10 +221,7 @@ And again, with an RFC 2047 encoded header. ... ... """) >>> process(mlist, msg, {}) - -.. - # XXX This one does not appear to work the same way as - # test_subject_munging_prefix_crooked() in the old Python-based tests. I need - # to get Tokio to look at this. - # >>> print(msg['subject']) - # [XTest] =?iso-2022-jp?b?IBskQiVhITwlayVeJXMbKEI=?= + >>> print(msg['subject'].encode()) + [XTest] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?= + >>> print(msg['subject']) + [XTest] メールマン ===================================== src/mailman/handlers/subject_prefix.py ===================================== --- a/src/mailman/handlers/subject_prefix.py +++ b/src/mailman/handlers/subject_prefix.py @@ -30,7 +30,7 @@ from mailman.interfaces.handler import IHandler from zope.interface import implementer -RE_PATTERN = '((RE|AW|SV|VS)(\[\d+\])?:\s*)+' +RE_PATTERN = '\s*((RE|AW|SV|VS)(\[\d+\])?\s*:\s*)+' ASCII_CHARSETS = (None, 'ascii', 'us-ascii') EMPTYSTRING = '' @@ -43,12 +43,6 @@ def ascii_header(mlist, msgdata, subject, prefix, prefix_pattern, ws): if charset not in ASCII_CHARSETS: return None subject_text = EMPTYSTRING.join(str(subject).splitlines()) - rematch = re.match(RE_PATTERN, subject_text, re.I) - if rematch: - subject_text = subject_text[rematch.end():] - recolon = 'Re: ' - else: - recolon = '' # At this point, the subject may become null if someone posted mail # with "Subject: [subject prefix]". if subject_text.strip() == '': @@ -57,6 +51,12 @@ def ascii_header(mlist, msgdata, subject, prefix, prefix_pattern, ws): else: subject_text = re.sub(prefix_pattern, '', subject_text) msgdata['stripped_subject'] = subject_text + rematch = re.match(RE_PATTERN, subject_text, re.I) + if rematch: + subject_text = subject_text[rematch.end():] + recolon = 'Re: ' + else: + recolon = '' lines = subject_text.splitlines() first_line = [lines[0]] if recolon: @@ -77,12 +77,6 @@ def all_same_charset(mlist, msgdata, subject, prefix, prefix_pattern, ws): if charset != list_charset: return None subject_text = EMPTYSTRING.join(chunks) - rematch = re.match(RE_PATTERN, subject_text, re.I) - if rematch: - subject_text = subject_text[rematch.end():] - recolon = 'Re: ' - else: - recolon = '' # At this point, the subject may become null if someone posted mail # with "Subject: [subject prefix]". if subject_text.strip() == '': @@ -91,6 +85,12 @@ def all_same_charset(mlist, msgdata, subject, prefix, prefix_pattern, ws): else: subject_text = re.sub(prefix_pattern, '', subject_text) msgdata['stripped_subject'] = subject_text + rematch = re.match(RE_PATTERN, subject_text, re.I) + if rematch: + subject_text = subject_text[rematch.end():] + recolon = 'Re: ' + else: + recolon = '' lines = subject_text.splitlines() first_line = [lines[0]] if recolon: View it on GitLab: https://gitlab.com/mailman/mailman/compare/7fe776a29281dc42e3274f7cf9cc5300dca61783...8b9a6f2d534f8d39f1a6f1dc6ac818a004455069
_______________________________________________ Mailman-checkins mailing list Mailman-checkins@python.org Unsubscribe: https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org