[ mailman-Patches-1455262 ] A workaround for treating long address splitted into lines
SourceForge.net
noreply at sourceforge.net
Tue Mar 21 11:12:31 CET 2006
Patches item #1455262, was opened at 2006-03-21 19:12
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=300103&aid=1455262&group_id=103
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: internationalization
Group: Mailman 2.1
Status: Open
Resolution: None
Priority: 5
Submitted By: Naoki Fukuta (naoki-fukuta)
Assigned to: Nobody/Anonymous (nobody)
Summary: A workaround for treating long address splitted into lines
Initial Comment:
---Summary:---
Following is a workaround for a problem when
processing very long email address field that is
splitted into two or more lines.
I tested it on Mailman 2.1.8.
Please evaluate this patch and feedback to the latest
build.
I appreciate if this is a duplicate of already reported
one.
---Problem Description:---
The mail address parser program
(pythonlib/email/_parseaddr.py) has a problem when the
field is splitted into two or more lines by using
continuations(eg. "\r\n " or "\r\n\t").
For example, following "Cc:" field can be splitted into
lines when the mail is sent to the server.
Cc:
=?ISO-2022-JP?B?IktCU0UbJEI4JjVmMnEbKEIgGyRCNDQ7dkNEGyhC?=
=?ISO-2022-JP?B?Ig==?= <fukutax at example.org>,
=?ISO-2022-JP?B?IhskQkVFO1I+cEpzREw/LjNYMnEbKEIgGyRCOCY1ZhsoQg==?=
=?ISO-2022-JP?B?GyRCMnFIL0k9Pz05fiU3JTklRiVgGyhCIg==?=
<fukutax at example2.org>
The main problem is there are no actual email address
at line 1 and 3.
Current code in _parseaddr.py expects there is at least
one valid email address in a line. So what will happen?
See below. When posting the mail to members, two
addresses are newly made, with a default domain name
(@mailman.example3.org).
Cc: =?ISO-2022-JP?B?Ig==?= <fukutax at example.org>,
=?ISO-2022-JP?B?IktCU0UbJEI4JjVmMnEbKEIgGyRCNDQ7dkNEGyhC?=@mailman.example3.org,
=?ISO-2022-JP?B?IhskQkVFO1I+cEpzREw/LjNYMnEbKEIgGyRCOCY1ZhsoQg==?=@mailman.example3.org,
=?ISO-2022-JP?B?GyRCMnFIL0k9Pz05fiU3JTklRiVgGyhCIg==?=
<fukutax at example2.org>
---Patch---
I made a workaroud patch by adding a darty code into
getphraselist() method.
----------------------------------------------------
def getphraselist(self):
"""Parse a sequence of RFC 2822 phrases.
A phrase is a sequence of words, which are in
turn either RFC 2822
atoms or quoted-strings. Phrases are
canonicalized by squeezing all
runs of continuous whitespace into one space.
"""
plist = []
while self.pos < len(self.field):
if self.field[self.pos] in self.LWS:
self.pos += 1
elif self.field[self.pos] == '"':
plist.append(self.getquote())
elif self.field[self.pos] == '(':
self.commentlist.append(self.getcomment())
+ elif (self.pos + 4) < len(self.field) and
self.field[self.pos] in '\r' and self.field[self.pos+1]
in '\n' and self.field[self.pos+2] in '\t':
+ self.pos += 3
+ elif (self.pos + 4) < len(self.field) and
self.field[self.pos] in '\r' and self.field[self.pos+1]
in '\n' and self.field[self.pos+2] in ' ':
+ self.pos += 3
+ elif (self.pos + 4) < len(self.field) and
self.field[self.pos] in '\n' and self.field[self.pos+1]
in '\t':
+ self.pos += 2
+ elif (self.pos + 4) < len(self.field) and
self.field[self.pos] in '\n' and self.field[self.pos+1]
in ' ':
+ self.pos += 2
+ elif (self.pos + 4) < len(self.field) and
self.field[self.pos] in '\r' and self.field[self.pos+1]
in '\t':
+ self.pos += 2
elif self.field[self.pos] in self.phraseends:
break
else:
plist.append(self.getatom(self.phraseends))
return plist
----------------------------------------
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=300103&aid=1455262&group_id=103
More information about the Mailman-coders
mailing list