From dca37679df92a629a27eca4cfa679c1e9f47d488 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Sun, 30 Apr 2006 21:26:41 +0000 Subject: [PATCH] Patch #1464708 from William McVey: fixed handling of nested comments in mail addresses. E.g. "Foo ((Foo Bar)) " Fixes for both rfc822.py and email package. This patch needs to be back ported to Python 2.3 for email 2.5 and forward ported to Python 2.5 for email 4.0. (I'll do both soon) --- Lib/email/_parseaddr.py | 1 + Lib/email/test/test_email.py | 6 ++++++ Lib/rfc822.py | 1 + Lib/test/test_rfc822.py | 10 ++++++++++ 4 files changed, 18 insertions(+) diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py index 8e6cb60bd58a..14012837925a 100644 --- a/Lib/email/_parseaddr.py +++ b/Lib/email/_parseaddr.py @@ -360,6 +360,7 @@ class AddrlistClass: break elif allowcomments and self.field[self.pos] == '(': slist.append(self.getcomment()) + continue # have already advanced pos from getcomment elif self.field[self.pos] == '\\': quote = True else: diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index 18f4894a31d0..1e4a510ad1d6 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -2212,6 +2212,12 @@ class TestMiscellaneous(TestEmailBase): ['foo: ;', '"Jason R. Mastaler" ']), [('', ''), ('Jason R. Mastaler', 'jason@dom.ain')]) + def test_getaddresses_embedded_comment(self): + """Test proper handling of a nested comment""" + eq = self.assertEqual + addrs = Utils.getaddresses(['User ((nested comment)) ']) + eq(addrs[0][1], 'foo@bar.com') + def test_utils_quote_unquote(self): eq = self.assertEqual msg = Message() diff --git a/Lib/rfc822.py b/Lib/rfc822.py index 18277d6dff4d..1319d231e0e4 100644 --- a/Lib/rfc822.py +++ b/Lib/rfc822.py @@ -711,6 +711,7 @@ class AddrlistClass: break elif allowcomments and self.field[self.pos] == '(': slist.append(self.getcomment()) + continue # have already advanced pos from getcomment elif self.field[self.pos] == '\\': quote = 1 else: diff --git a/Lib/test/test_rfc822.py b/Lib/test/test_rfc822.py index 0d9f28a77716..6d22825ddf6e 100644 --- a/Lib/test/test_rfc822.py +++ b/Lib/test/test_rfc822.py @@ -45,6 +45,10 @@ class MessageTestCase(unittest.TestCase): print 'extra parsed address:', repr(n), repr(a) continue i = i + 1 + self.assertEqual(mn, n, + "Un-expected name: %s != %s" % (`mn`, `n`)) + self.assertEqual(ma, a, + "Un-expected address: %s != %s" % (`ma`, `a`)) if mn == n and ma == a: pass else: @@ -129,6 +133,12 @@ class MessageTestCase(unittest.TestCase): 'To: person@dom.ain (User J. Person)\n\n', [('User J. Person', 'person@dom.ain')]) + def test_doublecomment(self): + # The RFC allows comments within comments in an email addr + self.check( + 'To: person@dom.ain ((User J. Person)), John Doe \n\n', + [('User J. Person', 'person@dom.ain'), ('John Doe', 'foo@bar.com')]) + def test_twisted(self): # This one is just twisted. I don't know what the proper # result should be, but it shouldn't be to infloop, which is -- 2.47.3