Commit aed50db4 authored by Mark Sapiro's avatar Mark Sapiro Committed by Barry Warsaw

Fixes for issue #147 Multiple "Re:" in subject.

parent 7fe776a2
......@@ -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: [email protected]
... 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,8 @@ And again, with an RFC 2047 encoded header.
...
... """)
>>> process(mlist, msg, {})
>>> print(msg['subject'].encode())
[XTest] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=
>>> print(msg['subject'])
[XTest] メールマン
..
# 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=?=
......@@ -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:
......
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