gh-134151 Fix TypeError
in email.utils.decode_params
when sorting RFC 2231 continuations (#134687)
- Fix sorting logic in `email.utils.decode_params` to handle None values. - Update tests for RFC 2231 continuation sorting.
This commit is contained in:
parent
d610f11d21
commit
bcb6b45cb8
@ -417,8 +417,14 @@ def decode_params(params):
|
||||
for name, continuations in rfc2231_params.items():
|
||||
value = []
|
||||
extended = False
|
||||
# Sort by number
|
||||
continuations.sort()
|
||||
# Sort by number, treating None as 0 if there is no 0,
|
||||
# and ignore it if there is already a 0.
|
||||
has_zero = any(x[0] == 0 for x in continuations)
|
||||
if has_zero:
|
||||
continuations = [x for x in continuations if x[0] is not None]
|
||||
else:
|
||||
continuations = [(x[0] or 0, x[1], x[2]) for x in continuations]
|
||||
continuations.sort(key=lambda x: x[0])
|
||||
# And now append all values in numerical order, converting
|
||||
# %-encodings for the encoded segments. If any of the
|
||||
# continuation names ends in a *, then the entire string, after
|
||||
|
@ -389,6 +389,24 @@ class TestMessageAPI(TestEmailBase):
|
||||
msg = email.message_from_string("Content-Type: blarg; baz; boo\n")
|
||||
self.assertEqual(msg.get_param('baz'), '')
|
||||
|
||||
def test_continuation_sorting_part_order(self):
|
||||
msg = email.message_from_string(
|
||||
"Content-Disposition: attachment; "
|
||||
"filename*=\"ignored\"; "
|
||||
"filename*0*=\"utf-8''foo%20\"; "
|
||||
"filename*1*=\"bar.txt\"\n"
|
||||
)
|
||||
filename = msg.get_filename()
|
||||
self.assertEqual(filename, 'foo bar.txt')
|
||||
|
||||
def test_sorting_no_continuations(self):
|
||||
msg = email.message_from_string(
|
||||
"Content-Disposition: attachment; "
|
||||
"filename*=\"bar.txt\"; "
|
||||
)
|
||||
filename = msg.get_filename()
|
||||
self.assertEqual(filename, 'bar.txt')
|
||||
|
||||
def test_missing_filename(self):
|
||||
msg = email.message_from_string("From: foo\n")
|
||||
self.assertEqual(msg.get_filename(), None)
|
||||
|
@ -0,0 +1,2 @@
|
||||
:mod:`email`: Fix :exc:`TypeError` in :func:`email.utils.decode_params`
|
||||
when sorting :rfc:`2231` continuations that contain an unnumbered section.
|
Loading…
x
Reference in New Issue
Block a user