Skip to content

Commit 00bc8b5

Browse files
committed
Fix email.parser stripping boudaries twice
1 parent b3ae769 commit 00bc8b5

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

Lib/email/message.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,7 @@ def get_boundary(self, failobj=None):
862862
parameter, and it is unquoted.
863863
"""
864864
missing = object()
865-
boundary = self.get_param('boundary', missing)
865+
boundary = self.get_param('boundary', missing, unquote=False)
866866
if boundary is missing:
867867
return failobj
868868
# RFC 2046 says that boundaries may begin but not end in w/s

Lib/test/test_email/test_email.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2209,6 +2209,42 @@ def test_boundary_with_leading_space(self):
22092209
eq(msg.get_boundary(), ' XXXX')
22102210
eq(len(msg.get_payload()), 2)
22112211

2212+
def test_boundary_stripped_only_once(self):
2213+
eq = self.assertEqual
2214+
msg = email.message_from_string('''\
2215+
MIME-Version: 1.0
2216+
Content-Type: multipart/mixed; boundary="<>"
2217+
2218+
--<>
2219+
Content-Type: text/plain
2220+
2221+
2222+
--<>
2223+
Content-Type: text/plain
2224+
2225+
--<>--
2226+
''')
2227+
self.assertTrue(msg.is_multipart())
2228+
eq(msg.get_boundary(), '<>')
2229+
eq(len(msg.get_payload()), 2)
2230+
2231+
msg = email.message_from_string('''\
2232+
MIME-Version: 1.0
2233+
Content-Type: multipart/mixed; boundary=<"">
2234+
2235+
--""
2236+
Content-Type: text/plain
2237+
2238+
2239+
--""
2240+
Content-Type: text/plain
2241+
2242+
--""--
2243+
''')
2244+
self.assertTrue(msg.is_multipart())
2245+
eq(msg.get_boundary(), '""')
2246+
eq(len(msg.get_payload()), 2)
2247+
22122248
def test_boundary_without_trailing_newline(self):
22132249
m = Parser().parsestr("""\
22142250
Content-Type: multipart/mixed; boundary="===============0012394164=="

0 commit comments

Comments
 (0)